await会挂起,不用await是同步。
那如何并发呢?
我居然不知道如何作答~
扶正一下。
@嘟嘟爸爸: async是标识并行执行,利用cpu的多核优势。至于并发,那是多个请求来的,每个请求都是独立的上下文,没啥影响的。
谁说不用await是同步?而且同步不就是挂起?
并行的是Task,要并行多个Task时,不能立马await Task,要先让这些Task先运行,然后再await。
var task1 = MethodAsync1();
var task2 = MethodAsync2();
await task1;
await task2;
上面的代码才能并行。
如果写成下面的样子,就不能并行了:
var task1 = await MethodAsync1();
var task2 = await MethodAsync2();
举例:
public async Task<int> Foo()
{
int a = await longTimeFunc(); //耗时操作
return a;
}
当一个外部方法内部调用了一个Foo方法时,先执行到Foo方法的“int a = await longTimeFunc();”这一行,由于耗时操作本应该发生阻塞,但是Foo是一个异步方法(加了async),所以会跳出Foo方法,先执行Foo方法后面的语句,之后一直等到longTimeFunc执行结束,内部才会继续向下执行。