等待任務執行完畢後,再接著執行其他的工作,是相當常見的需求。以下介紹幾種常見的需求。
等待某一任務完成
等待某一任務完成後,接著再執行另一任務。這是最基本的工作了。
static void Main(string[] args) { var tokenSource = new CancellationTokenSource(); var task1 = createTask(tokenSource.Token); task1.Start(); Console.WriteLine("等待執行完畢,或任務取消,或任務發生 Exception"); task1.Wait(); Console.WriteLine("執行完畢"); // task1 會執行完畢 var task2 = createTask(tokenSource.Token); task2.Start(); Console.WriteLine("等待執行完畢(只等3秒),或任務取消,或任務發生 Exception"); bool completed = task2.Wait(3000); Console.WriteLine("執行完畢:{0}", completed); //task2 仍然繼續執行,只是不等了 var task3 = createTask(tokenSource.Token); task3.Start(); Console.WriteLine("等待執行完畢(只等3秒),或任務取消,或任務發生 Exception"); completed = task3.Wait(3000, tokenSource.Token); Console.WriteLine("執行完畢:{0}, 是否取消:{1}", completed, task3.IsCanceled); }
執行結果如下
等待執行完畢,或任務取消,或任務發生 Exception Task Id 1: 0 Task Id 1: 1 Task Id 1: 2 Task Id 1: 3 Task Id 1: 4 執行完畢 等待執行完畢(只等3秒),或任務取消,或任務發生 Exception Task Id 2: 0 Task Id 2: 1 Task Id 2: 2 執行完畢:False 等待執行完畢(只等3秒),或任務取消,或任務發生 Exception Task Id 3: 0 Task Id 2: 3 Task Id 3: 1 Task Id 2: 4 Task Id 3: 2 執行完畢:False, 是否取消:False Task Id 3: 3 Press any key to continue . . . Task 有 Wait 的方法可以用來等待該任務完成的條件。
方法 | 說明 |
Wait() | 等待執行完畢 |
Wait(Int32) | 等待執行完畢,但只等一定的時間(微秒) |
Wait(Int32, CancellationToken) | 等待執行完畢,但只等一定的時間(微秒),或任務取消。 |
需要注意的是使用 int 當等待時間,當等待時間到達時,就不再等待而程式繼續向下執行,原本執行的任務依然繼續執行。由輸出中的 Task Id 來看,2 與 3 會交互執行一段時間。
沒有留言:
張貼留言