目錄:
- 為什麼要使用任務
- 任務
一、為什麼使用任務
執行緒池已經可以讓我們簡單地建立執行緒,並優化了效能。
但是,執行緒池的缺點在於,我不清楚我的操作什麼時候完成,也不能收到返回值,因為委託是沒有返回值的。
所以任務就出現了,它可以完成執行緒池能夠完成的任務。
System.Threading.Tasks //名稱空間
二、任務
我們使用:
public class Task<TResult> : Task { ...... public Task(Func<object, TResult> function, object state); ... ... }
首先我們分析一下,這個構造:
Func<object, TResult> //有一個引數,並且有一個返回值
object state //委託的實參引數
先定義有一個整數引數,還有一個整數返回值的方法:
private static int Count(int start) { for (int count = 0; count < 5; count++) { Console.WriteLine("index:{0}", count); start += count; } Console.WriteLine("{0}+{1}", DateTime.Now, start); return start; }
然後主執行緒,開啟任務:
public void Run(string args) { System.Threading.Tasks.Task<int> task = new System.Threading.Tasks.Task<int>(start=>Count((int)start),100);//一個整形引數引數start=100 task.Start(); Console.WriteLine(task.Result);//列印返回值 Console.ReadLine(); }
執行:
如何在一個任務結束時開啟另一個人任務呢?可以形成任務鏈。
task.ContinueWith(task2 => Console.WriteLine("我是任務2"));