【发布时间】:2018-02-24 15:56:10
【问题描述】:
我有一个异步方法:
public async Task<Foo> GetFooAsync();
我需要它的同步版本。像这样的:
public Foo GetFoo();
我真的不想完全重写GetFooAsync 的代码,我想做一些事情,比如
public Foo GetFoo()
{
return GetFooAsync().GetAwaiter().GetResult();
}
这是个好主意还是这种方法有什么不明显的问题?据我所知,如果我在同步上下文中使用GetFooAsync().Result,我可能会遇到死锁。但是GetFooAsync().GetAwaiter().GetResult()呢?
【问题讨论】:
-
return GetFooAsync().Result;? -
不要使用
.Result使用.GetAwaiter().GetResult(),因为后者处理聚合异常,前者不处理。 -
如果你想要一个同步版本然后单独添加一个 shync 重载
-
@Rahul 显然我不明白。你能用一个例子来解释你的想法吗?
-
我同意 Rahul 的观点,不要用同步调用来包装你的异步方法。咬紧牙关改写吧。
标签: c# async-await