首页 > 解决方案 > 如何等待 Task.Run 完成

问题描述

我有一个程序可以处理这样的事情

var t=Task.Run(()=>process());
while(!t.IsCompleted())
 Task.Delay(1000);
Console.WriteLine(t.Result);

有没有其他方法可以让程序等到任务完成?

标签: c#.nettask.net-4.7

解决方案


您在这里所做的基本上是“同步异步”。这里的错误解决方法是……t.Wait()而不是你的循环。但是,实际上,您应该尝试制作此代码async,并改用:

Console.WriteLine(await t);

请注意,如果需要,Main可以使用 C# 中的方法。async static Task Main()

然而!在这里使用真的没有什么意义Task.Run- 那只是占用一个池线程,并阻止当前线程等待它。你没有从中得到任何东西Task.Run

  • 如果process()是同步的:只需使用Console.WriteLine(process())
  • ifprocess()是异步的(返回一个Task<T>/ ValueTask<T>/etc):只需使用Console.WriteLine(await process())

推荐阅读