请问在 C# 中如果一个 asnyc 方法调用另外一个 asnyc 方法时没有进行 await 会发生什么情况?
不await,方法的里的前面的非continuation代码将同步执行,continuation部分代码在其它线程执行,continuation如果有异常,在GC时程序就挂掉。
简单说,不await一个async Task Method,等同于一个async void Method被调用。
而且发生异常时不能被捕获
没有 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是封装简化了异步阻塞而已。不写意味着不阻塞。
不就是 同步调用吗
https://msdn.microsoft.com/zh-cn/library/hh191443(v=vs.120).aspx
异步方法通常包含 await 运算符的一个或多个匹配项,但缺少 await 表达式不会导致编译器错误。 如果异步方法未使用 await 运算符标记悬挂点,则该方法将作为同步方法执行,不管异步修饰符如何。 编译器将为此类方法发布一个警告。
不await .asycn就没用,跟同步方法一样
如果我await了,我为什么还要用异步呢,我直接用同步还少写几个async和await关键字,不是更简单吗?
看到不少人说 不await 就是同步调用 读不懂人家警告的语句嘛?异步方法 也分返回值和没返回值 await 是等待任务完成获取返回值 不await 当然就是不阻塞不等待返回值 异步和同步的根本区别是啥? 就是执行一个任务的时候 异步是多线程 同步是单线程执行。