首页 新闻 会员 周边

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

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

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

dudu的主页 dudu | 高人七级 | 园豆:31003
提问于: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 | 园豆:31003 (高人七级) | 2019-10-24 10:20
其他回答(6)
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
爱编程的大叔 | 园豆:30839 (高人七级) | 2018-10-30 12:28

顶一个

支持(1) 反对(1) hmflhmfl | 园豆:200 (初学一级) | 2021-12-16 09:44
0

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

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

不就是 同步调用吗

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

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

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

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

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

holdengong | 园豆:212 (菜鸟二级) | 2018-11-16 08:32

如果我await了,我为什么还要用异步呢,我直接用同步还少写几个async和await关键字,不是更简单吗?

支持(0) 反对(0) Easy C# | 园豆:405 (菜鸟二级) | 2021-11-17 09:25
0

看到不少人说 不await 就是同步调用 读不懂人家警告的语句嘛?异步方法 也分返回值和没返回值 await 是等待任务完成获取返回值 不await 当然就是不阻塞不等待返回值 异步和同步的根本区别是啥? 就是执行一个任务的时候 异步是多线程 同步是单线程执行。

远方的诗意 | 园豆:204 (菜鸟二级) | 2021-12-28 11:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册