首页 新闻 搜索 专区 学院

C# 中调用 async 异步方法时不 await 会怎样

0
悬赏园豆:100 [已解决问题] 解决于 2018-11-22 08:23

请问在 C# 中如果一个 asnyc 方法调用另外一个 asnyc 方法时没有进行 await 会发生什么情况?

dudu的主页 dudu | 高人七级 | 园豆:38829
提问于:2018-10-30 12:07
< >
分享
最佳答案
1

不await,方法的里的前面的非continuation代码将同步执行,continuation部分代码在其它线程执行,continuation如果有异常,在GC时程序就挂掉。
简单说,不await一个async Task Method,等同于一个async void Method被调用。

收获园豆:80
jiulang | 菜鸟二级 |园豆:437 | 2018-11-21 23:43

而且发生异常时不能被捕获

dudu | 园豆:38829 (高人七级) | 2019-10-24 10:20
其他回答(5)
0

没有 await 是可以的,但是下面的代码就会立刻执行了,不会等另外一个 async 方法执行完毕的,
也就是相当于你开了另外一个线程去执行另外一个方法而已。
如果你下面的代码需要依赖另外一个 async 方法的计算过程或者结果的话,就会出问题了。
如果没有前后依赖的话,确实可以无需 await的。

int result=1;

await result=otherAsync(); //return 2 after 10 seconds;
//result=otherAsync()         //without await; you should check this code by yourself, maybe it is wrong.

var entity= new log {result=result};
db.Add(entity);
await db.SaveChangesAsync();
收获园豆:20
爱编程的大叔 | 园豆:30698 (高人七级) | 2018-10-30 12:28
0

await是封装简化了异步阻塞而已。不写意味着不阻塞。

花飘水流兮 | 园豆:11775 (专家六级) | 2018-10-30 13:27
0

不就是 同步调用吗

放逐人 | 园豆:638 (小虾三级) | 2018-10-30 18:08
1

https://msdn.microsoft.com/zh-cn/library/hh191443(v=vs.120).aspx

异步方法通常包含 await 运算符的一个或多个匹配项,但缺少 await 表达式不会导致编译器错误。 如果异步方法未使用 await 运算符标记悬挂点,则该方法将作为同步方法执行,不管异步修饰符如何。 编译器将为此类方法发布一个警告。

慧☆星 | 园豆:5399 (大侠五级) | 2018-10-31 09:50
0

不await .asycn就没用,跟同步方法一样

holdengong | 园豆:212 (菜鸟二级) | 2018-11-16 08:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册