【发布时间】:2021-12-28 20:54:50
【问题描述】:
await 运算符暂停对封闭异步方法的评估,直到其操作数表示的异步操作完成
但是根据这个post:
//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,我们必须将函数更改为async,这会使逻辑复杂化。但是访问任务的结果属性不需要这个
【问题讨论】:
-
正如评论所暗示的,使用 await/async 使得这段代码_不会阻塞当前线程。这可能很重要,例如,如果您在服务器上调用此函数,那么您可能会遇到线程不足的风险。 (如果没有可用的线程,服务器将不得不拒绝新连接,因为它们只是在等待)。或者如果正在使用 UI 线程,您的 UI 将在等待结果时冻结。我
-
嗯,加上'still'这个词,就不再重复了吗?
-
使用
.Result基本上将整个异步点砸在地上,然后在其上跳舞,唱“neh neh neh”。它非常有害,并且在某些情况下还可能导致死锁。永远不要那样做(关于“除非你知道它已经成功完成”有一个小小的警告,但这不适用于一般情况)。所以是的:你需要await
标签: c#