c# - 如何等待 Task.Run 完成

标签 c# .net task .net-4.7

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

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

有没有其他方法让程序等待任务完成?

最佳答案

您在这里所做的是本质上“同步优于异步”。这里的错误 修复只是... t.Wait()而不是你的循环。但是,实际上,您应该尝试编写此代码 async ,并改用:

Console.WriteLine(await t);

请注意您的 Main C# 中的方法可以是 async static Task Main()如果需要的话。

但是!使用 Task.Run 确实没有什么意义在这里 - 这只是占用一个池线程,并阻塞当前线程等待它。您不会从 Task.Run 中获得任何 yield !

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

关于c# - 如何等待 Task.Run 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61930973/

相关文章:

c# - 如何将 IQueryable<T> 转换为 List<T>?

.net - 这是在 vb.net 中用 null 初始化字符串的最佳方法

c# - 摆脱滚动列表框中的额外空间

wcf - 从 WCF 使用 TPL 任务

c# - 安装 Json.Net 并在项目中引用它后出错。 window 电话 8

c# - Google Speech API v2 结果为空白

c# - 带有自定义 ToolStripControlHost 的 ToolStrip 使 Tab 键顺序焦点行为怪异

c# - 使用 protobuf-net.grpc 通过 gRPC 发布/订阅通知服务

c# - 使用 Task.Unwrap 获取内部任务

c# - 分配给委托(delegate)时的返回值和签名歧义——Func<Task> vs Action