task - 我应该使用 Task.Wait() 吗?

标签 task console-application wait c#-2.0

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

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

最佳答案

Wait()的来电在访问Result之前没有必要。

查看 Task 的引用码和 Task<TResult> 显示void Wait() Result 的方法和 getter属性最终进入执行实际等待的方法:

internal bool InternalWait(int millisecondsTimeout, CancellationToken cancellationToken)

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

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

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

关于task - 我应该使用 Task.Wait() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52763926/

相关文章:

batch-file - 如何制作向应用程序发送输入字符的批处理文件

java - 线程同步——如何交替执行线程

java - 仅使用同步块(synchronized block)构建 wait()/notify() 机制

c# - 何时使用 TaskCreationOptions.LongRunning?

c# - 如何取消执行非托管 C++ 外部例程的任务

io - 如何处理长时间运行的外部函数调用,例如 Rust 中的阻塞 I/O?

c# - 迭代元组中的项目

c# - .net 4.0 任务中的私有(private)变量

c# - SetConsoleActiveScreenBuffer 不显示屏幕缓冲区

unit-testing - Flutter/Dart 在单元测试中等待几秒钟