如何从Task wait()获取返回值

问题描述 投票:0回答:2

我有一个返回值的异步方法,我想等待此任务完成。

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

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

c# asp.net asp.net-mvc asp.net-core async-await
2个回答
16
投票

典型的方法是直接写

 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(...)


0
投票
var result = await Task.Run(() => SomeMethod(param1));
© www.soinside.com 2019 - 2024. All rights reserved.