6.C#async/await异步编程

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

猜你喜欢

转载自blog.csdn.net/Chen104617590/article/details/81540522