有没有办法同步 运行 一个 C# 任务并在一行代码中得到结果?
Is there a way to synchronously run a C# task and get the result in one line of code?
我有一个异步方法,当我按如下方式调用它时它会起作用:
var result = await someClass.myAsyncMethod(someParameter);
是否可以在一行代码中做这样的事情?
var task = someClass.myAsyncMethod(someParameter);
task.RunSynchronously();
var result = task.Result;
是的,您可以在调用方法后直接使用 Result
属性 来完成:
var result = someClass.myAsyncMethod(someParameter).Result;
更好的方法是将其包装在 Task.Run()
中以避免死锁,例如:
var result = Task.Run(() => {
return someClass.myAsyncMethod(someParameter);
}).Result;
我还在 MSDN 上找到了这个 RunSynchronously() method,但这不会解决您的问题,因为您需要在线简单代码。
如果你发现自己经常这样做,你可以写一个小扩展
public static class TaskExtensions
{
public static T SyncResult<T>(this Task<T> task)
{
task.RunSynchronously();
return task.Result;
}
}
那么你可以使用:
var result = Task.SyncResult();
我有一个异步方法,当我按如下方式调用它时它会起作用:
var result = await someClass.myAsyncMethod(someParameter);
是否可以在一行代码中做这样的事情?
var task = someClass.myAsyncMethod(someParameter);
task.RunSynchronously();
var result = task.Result;
是的,您可以在调用方法后直接使用 Result
属性 来完成:
var result = someClass.myAsyncMethod(someParameter).Result;
更好的方法是将其包装在 Task.Run()
中以避免死锁,例如:
var result = Task.Run(() => {
return someClass.myAsyncMethod(someParameter);
}).Result;
我还在 MSDN 上找到了这个 RunSynchronously() method,但这不会解决您的问题,因为您需要在线简单代码。
如果你发现自己经常这样做,你可以写一个小扩展
public static class TaskExtensions
{
public static T SyncResult<T>(this Task<T> task)
{
task.RunSynchronously();
return task.Result;
}
}
那么你可以使用:
var result = Task.SyncResult();