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

2019-01-02 21:09发布

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

标签: async/await
6条回答
妖精总统
2楼-- · 2019-01-02 21:18

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

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

查看更多
低头抚发
3楼-- · 2019-01-02 21:22

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

查看更多
大哥的爱人
4楼-- · 2019-01-02 21:24

没有 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();
查看更多
宁负流年不负卿
5楼-- · 2019-01-02 21:27

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

查看更多
只若初见
6楼-- · 2019-01-02 21:29

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

查看更多
像晚风撩人
7楼-- · 2019-01-02 21:30

不就是 同步调用吗

查看更多
登录 后发表回答