如何从 Task wait() 获取 return 值

How to get return value from Task wait()

我有一个 return 值的异步方法,我想为这个任务添加等待。

var return = Task.Run(() => SomeMethod(param1)).Wait();

如何从这条线上方获取 return 值。

典型的方法是只写

 var result = Task.Run(() => SomeMethod(param1)).Result;

这将阻塞,直到结果可用。所以相当于

var task = Task.Run(() => SomeMethod(param1));
task.Wait();
return task.Result;

请注意,通常不建议使用 .Result。它会阻塞调用线程,所以不只是使用 var result = SomeMethod(param1) 没有什么意义。也存在死锁的风险。如果这是 UI 线程上的 运行,并且 SomeMethod 使用 .Invoke 或其他等待 UI 线程的东西,那么您的程序将死锁。

一般推荐的方法是使用async/await:var result = await Task.Run(...)

var result = await Task.Run(() => SomeMethod(param1));