公告
财富商城
积分规则
提问
发文
2019-01-02 21:09发布
初与友歌
请问在 C# 中如果一个 asnyc 方法调用另外一个 asnyc 方法时没有进行 await 会发生什么情况?
https://msdn.microsoft.com/zh-cn/library/hh191443(v=vs.120).aspx
异步方法通常包含 await 运算符的一个或多个匹配项,但缺少 await 表达式不会导致编译器错误。 如果异步方法未使用 await 运算符标记悬挂点,则该方法将作为同步方法执行,不管异步修饰符如何。 编译器将为此类方法发布一个警告。
await是封装简化了异步阻塞而已。不写意味着不阻塞。
没有 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();
不await,方法的里的前面的非continuation代码将同步执行,continuation部分代码在其它线程执行,continuation如果有异常,在GC时程序就挂掉。 简单说,不await一个async Task Method,等同于一个async void Method被调用。
不await .asycn就没用,跟同步方法一样
不就是 同步调用吗
最多设置5个标签!
https://msdn.microsoft.com/zh-cn/library/hh191443(v=vs.120).aspx
await是封装简化了异步阻塞而已。不写意味着不阻塞。
没有 await 是可以的,但是下面的代码就会立刻执行了,不会等另外一个 async 方法执行完毕的,
也就是相当于你开了另外一个线程去执行另外一个方法而已。
如果你下面的代码需要依赖另外一个 async 方法的计算过程或者结果的话,就会出问题了。
如果没有前后依赖的话,确实可以无需 await的。
不await,方法的里的前面的非continuation代码将同步执行,continuation部分代码在其它线程执行,continuation如果有异常,在GC时程序就挂掉。
简单说,不await一个async Task Method,等同于一个async void Method被调用。
不await .asycn就没用,跟同步方法一样
不就是 同步调用吗