我有一个返回值的异步方法,我想等待此任务完成。
var return = Task.Run(() => SomeMethod(param1)).Wait();
如何从这条线上方获取返回值。
典型的方法是直接写
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));