async和await

北城以北 提交于 2021-01-05 10:47:18

await和async是.NET Framework4.5框架、C#5.0语法里面出现的,await和async是语法糖。

注意:

1、async出现在方法的声明里面,任何一个方法都可以增加async。

2、await放在Task前面,async和await是成对出现的,只有async是没有意义的,只有await是报错的。

只有async是没有意义的。

只有await是报错的。

3、await 只能放在task前面,不推荐void返回值,使用Task来代替。Task和Task<T>能够使用await, Task.WhenAny, Task.WhenAll等方式组合使用。Async Void 不行

 1 private static async Task Return()
 2 {
 3             //主线程执行
 4             Console.WriteLine($"NoReturn Sleep before await,ThreadId={Thread.CurrentThread.ManagedThreadId}");
 5             TaskFactory taskFactory = new TaskFactory();
 6             Task task = taskFactory.StartNew(() =>
 7             {
 8                 Console.WriteLine($"NoReturn Sleep before,ThreadId={Thread.CurrentThread.ManagedThreadId}");
 9                 Thread.Sleep(3000);
10                 Console.WriteLine($"NoReturn Sleep after,ThreadId={Thread.CurrentThread.ManagedThreadId}");
11             });
12             //主线程到这里就返回了,执行主线程任务
13             await task;
14             //这个回调的线程是不确定的:可能是主线程  可能是子线程  也可能是其他线程
15             Console.WriteLine($"NoReturn Sleep after await,ThreadId={Thread.CurrentThread.ManagedThreadId}");
16 }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!