如何从 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));
我有一个 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));