async/await是一种优雅的异步实现
这里只是讲一下应该明确的重点
仅用async标记方法并不会使其本质发生改变
被async标记过之后,函数中就可使用await关键字,但是如果不使用await关键字,该方法也只是个同步方法
await关键字并不会造成线程阻塞,主线程依旧在活动
把await关键字放在耗时操作前,可以把耗时操作交给其他线程异步执行,主线程不会阻塞,然后在被标记的耗时操作执行完毕后,主线程会回到异步函数中await标记的地方
异步方法的返回值可以是Task、Task<>或void
public async Task MyAsync()
{
Task myTask = Task.Delay(100);
await myTask;
};
异步匿名函数
//lamda表达式
Func<Task> myAsyncFunc1= async () => await Task.Delay(100);
//匿名方法
Func<Task<int>> myAsyncFunc2 = async delegate()
{
Console.WriteLine("My async method is start.");
await Task.Delay(100);
Console.WriteLine("My async method is finish.");
return 100;
}
这里用Task.Delay()来模拟耗时操作
异步方法可以作为事件的订阅者使用
异步方法的参数不可以是out或ref