iT邦幫忙

2022 iThome 鐵人賽

DAY 29
0
自我挑戰組

Bug仔的筆記本系列 第 29

基於 Task 的非同步

  • 分享至 

  • xImage
  •  

今天花一點時間學一下非同步。

.NET 1.0 就有提供非同步的功能。而現成我們 C# 程式中常看到的非同步,是使用 .NET 4.0 提供的非同步 API -- Task Parallel Library (TPL),其核心非同步的管理方式,是基於任務的非同步模式-- Task-based Asynchronous Pattern (TAP)。

其 Library 提供的 Task 類別,代表一個非同步工作的封裝。執行過程由 Library 內的工作排程器控制,來決定如何分配thread

當我們要做的事情,包進 Task 裡,讓 Task 來執行(Start),就代表有使用到 執行緒
使之主程式 Main()用的執行序,跟Task用的執行序不同。

以下是範例程式。

void Main()
{
	var task = new Task(MyTask);
	task.Start();
	
    for (int i = 0; i < 500; i++)
    {
        Console.Write('.');
    }
}

void MyTask()
{
	for (int i = 0; i < 500; i++)
    {
    	Console.Write('[' + Thread.CurrentThread.ManagedThreadId + ']');
    }
}

以下是執行結果,每次按 F5 的結果都會不一樣,可以看到,電腦做到一半,就會切換執行緒執行。何時切換,切換幾次才會全部執行完,都是不一定。
https://ithelp.ithome.com.tw/upload/images/20221014/20120420zQbu7rjI1C.png

不另外寫一個方法,而是直接寫個匿名方法給Task.Run()立即執行也是可以。

var task = Task.Run(() =>
{
    for (int i = 0; i < 500; i++)
    {
     Console.Write('[' + Thread.CurrentThread.ManagedThreadId + ']');
    }
});

for (int i = 0; i < 500; i++)
{
    Console.Write('.');
}

參考資料
《.NET 本事 - 非同步程式設計》


上一篇
訂製你的權限驗證 Authorize Filter
下一篇
第三十天(2022年)
系列文
Bug仔的筆記本30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言