多執行緒系列(四):Task

K戰神發表於2018-04-02

目錄:

  • 為什麼要使用任務
  • 任務

一、為什麼使用任務

執行緒池已經可以讓我們簡單地建立執行緒,並優化了效能。

但是,執行緒池的缺點在於,我不清楚我的操作什麼時候完成,也不能收到返回值,因為委託是沒有返回值的。

所以任務就出現了,它可以完成執行緒池能夠完成的任務。

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"));

 

相關文章