我有一个程序可以处理这样的事情
var t=Task.Run(()=>process());
while(!t.IsCompleted())
Task.Delay(1000);
Console.WriteLine(t.Result);
有没有其他方法让程序等到Task被完成?
你在这里做的是 基本上 "sync over async"。该 错的 这里的修复方法是用... t.Wait()
而不是你的循环。然而,实际上,你应该尝试让这段代码成为 async
,并使用代替。
Console.WriteLine(await t);
注意,你的 Main
在C#中的方法可以是 async static Task Main()
如果需要的话
但是!在这里。有 实在没啥意思 使用 Task.Run
在这里--这只是占用了一个池子里的线程,并阻止了当前的线程。等着呢. 你并没有得到任何东西,从 Task.Run
!
process()
是同步的:只要使用 Console.WriteLine(process())
process()
是异步的(返回一个 Task<T>
ValueTask<T>
等):只需用 Console.WriteLine(await process())
它会自动发生。你只需要。
var t=Task.Run(()=>process());
Console.WriteLine(t.Result);
如果... t.Result
一开始是不可用的,程序就会在这一点上阻塞,直到计算出数值。
也就是说,如果你只是想等待结果,为什么要把它作为一个任务来运行呢?