我有一个程序可以处理这样的事情
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/