首页 > 解决方案 > 我应该使用 Task.Wait() 吗?

问题描述

我应该taskThatReturns.Wait()在下面的代码中使用还是可以省略它,因为根据我的理解taskThatReturns.Result,无论如何都会等待。

Task<string> taskThatReturns = new Task<string>(MethodThatReturns);
taskThatReturns.Start();
taskThatReturns.Wait();
Console.WriteLine(taskThatReturns.Result);

标签: taskconsole-applicationwaitc#-2.0

解决方案


Wait()访问之前的调用Result是不必要的。

Task检查and的参考代码Task<TResult>表明,属性的void Wait()方法和 getterResult最终都会进入执行实际等待的方法:

internal bool InternalWait(int millisecondsTimeout, CancellationToken cancellationToken)

两个代码路径都将相同的参数值发送到InternalWait- 无限等待和默认取消令牌。

如果Wait在访问之前调用Result,getter 中的代码路径InternalWait将被跳过,因为已知任务已完成。但是,在这两种情况下,最终结果将保持不变。

注意:此答案故意忽略优化代码片段的机会。


推荐阅读