有没有办法同步 运行 一个 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();