[英]Do we still need to use await in c#?
await 运算符暂停对封闭 async 方法的评估,直到其操作数表示的异步操作完成
但根据这篇文章:
//You can access the Result property of the task,
//which will cause your thread to block until the result is available:
string code = GenerateCodeAsync().Result;
这是否意味着我们不再需要await
? 因为如果我们使用await
,我们必须将 function 更改为async
,这会使逻辑复杂化。 但是访问任务的结果属性不需要这个
更新
//code1
func1();
var r = asyncFunc().Result;
func2(); //thread block, func2 won't be called until asyncFunc completes.
//code2
func1();
await asyncFunc();
func2(); //will func2 be called immediately after "await asyncFunc()"?
100 倍是的 - await
很重要。 .Result
将阻塞调用线程,直到产生结果。 await
允许运行时仅在需要时挂起和唤醒后续代码,而不阻塞任何线程。 实际上, await
可以在完全不同的线程上唤醒。
一点历史花絮: Task<T>
和它的.Result
被添加为 C# 4.0 和任务并行库的一部分,早在async
和await
之前。
我认为 async/await 模式的一个常见误解是暂停执行 == 阻塞结果。 然而,这不是真的。 当您调用 await 时,您的程序实际上并没有停止执行,它会将线程推入等待队列,该队列将在 IO 完成后复活。 这允许其他任务同时运行。 虽然从技术上讲,您总是可以阻止结果并使用相同的代码 output,但使用 await,您的代码会运行得更快。
GenerateCodeAsync().Result
在这种情况下只是从您的代码中删除异步。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.