首页 新闻 搜索 专区 学院

await困惑

0
悬赏园豆:10 [已解决问题] 解决于 2016-09-21 13:50

await会挂起,不用await是同步。
那如何并发呢?

zhyinguang的主页 zhyinguang | 初学一级 | 园豆:38
提问于:2016-09-09 12:58
< >
分享
最佳答案
0

我居然不知道如何作答~

收获园豆:10
幻天芒 | 高人七级 |园豆:36781 | 2016-09-09 13:11

扶正一下。

zhyinguang | 园豆:38 (初学一级) | 2016-09-09 13:12

@嘟嘟爸爸: async是标识并行执行,利用cpu的多核优势。至于并发,那是多个请求来的,每个请求都是独立的上下文,没啥影响的。

幻天芒 | 园豆:36781 (高人七级) | 2016-09-09 13:18
其他回答(3)
0

谁说不用await是同步?而且同步不就是挂起?

吴瑞祥 | 园豆:29187 (高人七级) | 2016-09-09 13:00
2

并行的是Task,要并行多个Task时,不能立马await Task,要先让这些Task先运行,然后再await。

var task1 = MethodAsync1();
var task2 = MethodAsync2();
await task1;
await task2;

上面的代码才能并行。
如果写成下面的样子,就不能并行了:

var task1 = await MethodAsync1();
var task2 = await MethodAsync2();
dudu | 园豆:37154 (高人七级) | 2016-09-09 13:46
0

举例:

public async Task<int> Foo()

{

    int a = await longTimeFunc();    //耗时操作

    return a;

}

当一个外部方法内部调用了一个Foo方法时,先执行到Foo方法的“int a = await longTimeFunc();”这一行,由于耗时操作本应该发生阻塞,但是Foo是一个异步方法(加了async),所以会跳出Foo方法,先执行Foo方法后面的语句,之后一直等到longTimeFunc执行结束,内部才会继续向下执行。

朝雨 | 园豆:272 (菜鸟二级) | 2016-09-16 20:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册