與其他多線程相比,Task 可以 傳回 異步執行後的結果。根據結果,我們來進一步程式設計

static void Main(string[] args)
{
Console.OutputEncoding = Encoding.UTF8;
//callMethod();
Method4();
Console.WriteLine("=================");
Console.ReadKey();
}
public static void Method4()
{
CancellationTokenSource cts = new CancellationTokenSource();
//建立一個任務
Task<int> task = new Task<int>(() =>
{
int sum = 0;
Console.WriteLine("使用Task執行異步操作.");//------2
for (int i = 0; i < 100; i++)
{
Thread.Sleep(100);
sum += i;
}
return sum;
},cts.Token);
//啟動任務,并安排到目前任務隊列線程中執行任務(System.Threading.Tasks.TaskScheduler)
task.Start();
Console.WriteLine("主線程執行其他處理"); //----1
//任務完成時執行處理。
Task cwt = task.ContinueWith(t =>
{
Thread.Sleep(1000);
Console.WriteLine("任務完成後的執行結果:{0}", t.Result.ToString());//------4
});
Console.WriteLine("主線程執行其他處理2");
//if(task.Wait(5000))
//{
// Console.WriteLine("task執行超時---------");
// cts.Cancel();
//}
//task.Wait(); // 會阻塞主線程
Console.WriteLine("task執行結束");//-----3
//cwt.Wait(); // 阻塞目前線程,直到回調執行完畢
Console.WriteLine("task回調執行結束");//-------5
Console.WriteLine("主線程執行其他處理3");
}