async和await

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 }

猜你喜欢

转载自www.cnblogs.com/dotnet261010/p/9251123.html