task - 我应该使用 Task.Wait() 吗?
问题描述
我应该taskThatReturns.Wait()
在下面的代码中使用还是可以省略它,因为根据我的理解taskThatReturns.Result
,无论如何都会等待。
Task<string> taskThatReturns = new Task<string>(MethodThatReturns);
taskThatReturns.Start();
taskThatReturns.Wait();
Console.WriteLine(taskThatReturns.Result);
解决方案
Wait()
访问之前的调用Result
是不必要的。
Task
检查and的参考代码Task<TResult>
表明,属性的void Wait()
方法和 getterResult
最终都会进入执行实际等待的方法:
internal bool InternalWait(int millisecondsTimeout, CancellationToken cancellationToken)
两个代码路径都将相同的参数值发送到InternalWait
- 无限等待和默认取消令牌。
如果Wait
在访问之前调用Result
,getter 中的代码路径InternalWait
将被跳过,因为已知任务已完成。但是,在这两种情况下,最终结果将保持不变。
注意:此答案故意忽略优化代码片段的机会。
推荐阅读
- java - 无锁并发栈实现
- php - php laravel迁移中的外键索引名称大小错误
- php - 使用mysqli中的变量时如何回显href
- emacs - 当我启动 Guile Web 服务器时 Geiser / Emacs 挂起
- node.js - 找出我的节点项目正在使用哪些环境变量?
- c# - C# UWP ListView 移除所有视觉效果
- php - Apache 2.4 php 7.2 Apache(php 模块)增加最大连接数以处理 10000
- javascript - CSS / jQuery - 16x9 纵横比图像 - 匹配 div 尺寸
- r - 在R中合并两个表
- c# - AutoMapper 根据其他模型属性值映射所有属性