c# - 如何等待 Task.Run 完成
问题描述
我有一个程序可以处理这样的事情
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
!
- 如果
process()
是同步的:只需使用Console.WriteLine(process())
- if
process()
是异步的(返回一个Task<T>
/ValueTask<T>
/etc):只需使用Console.WriteLine(await process())
推荐阅读
- python - 使用 Python,有没有更优雅的方法来查找列表中的第二大数字?
- javascript - javascript中未定义的数组变量
- android - 具有类似于活动的共享元素的片段转换
- python-3.x - 如何等到元素的文本更改为字符串以外的其他内容?
- node.js - [tokio-rs][documentation] 具有共享状态示例的多个异步“子应用程序”?
- angular - “可观察”类型上不存在属性“json”
' - javascript - C#和Webview控件,如何知道javascript何时完成?
- prometheus - 查询时如何指定 Prometheus 输出格式?
- reactjs - 组件选择器只能和 babel-plugin-emotion 一起使用 使用emotion时报错
- php - PHP MySQL Jquery - 过滤器列表上的重复行