## 对并行执行的异步任务使用await操作符 ```csharp /// <summary> /// 对并行执行的异步任务使用await操作符 /// </summary> /// <param name="args"></param> static void Main(string[] args) { Task t = AsynchronousProcessing(); t.Wait(); Console.ReadLine(); } static async Task AsynchronousProcessing() { // 定义了两个任务,分别运行3秒和5秒 Task<string> t1 = GetInfoAsync("Task 1", 3); Task<string> t2 = GetInfoAsync("Task 2", 5); // 使用Task.WhenALL辅助方法创建一个任务,该任务只有在所有底层任务完成后才会运行 string[] results = await Task.WhenAll(t1, t2); // 5秒后获得观察结果 foreach (string result in results) { Console.WriteLine(result); } } static async Task<string> GetInfoAsync(string name, int seconds) { // Task.Delay方法不阻塞线程,而是在幕后使用了一个计时器 // 导致两个任务一般总是由同一个线程运行 await Task.Delay(TimeSpan.FromSeconds(seconds)); // 如果使用下面注释掉的代码模拟运行时间,则两个任务总是由不同的线程运行 // 因为Thread.Sleep方法阻塞线程 // await Task.Run(() => Thread.Sleep(TimeSpan.FromSeconds(seconds))); return $"Task {name} is running on a thrad id {Thread.CurrentThread.ManagedThreadId}. " + $"Is thread pool thread: {Thread.CurrentThread.IsThreadPoolThread}"; } ``` 5秒后打印出结果 ``` Task Task 1 is running on a thrad id 4. Is thread pool thread: True Task Task 2 is running on a thrad id 4. Is thread pool thread: True ``` Loading... 版权声明:本文为博主「佳佳」的原创文章,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://www.liujiajia.me/2017/8/4/csharp-multi-threading-05-csharp6-04-multi-parallel-await 提交