【发布时间】:2014-03-25 07:34:14
【问题描述】:
我有一个async 方法:
public async Task<string> GenerateCodeAsync()
{
string code = await GenerateCodeService.GenerateCodeAsync();
return code;
}
我需要从同步方法中调用此方法。
我怎样才能做到这一点而不必复制GenerateCodeAsync 方法以使其同步工作?
更新
尚未找到合理的解决方案。
不过,我看到HttpClient 已经实现了这个模式
using (HttpClient client = new HttpClient())
{
// async
HttpResponseMessage responseAsync = await client.GetAsync(url);
// sync
HttpResponseMessage responseSync = client.GetAsync(url).Result;
}
【问题讨论】:
-
我希望有一个更简单的解决方案,认为 asp.net 处理这比编写这么多行代码要容易得多
-
为什么不直接采用异步代码呢?理想情况下,您需要更多的异步代码,而不是更少。
-
[为什么不直接采用异步代码?] 哈,可能正是因为采用异步代码,他们需要这个解决方案,因为项目的大部分都被转换了!你不可能在一天内重建罗马。
-
@NicholasPetersen 有时第 3 方库会强迫您这样做。在 FluentValidation 之外的 WithMessage 方法中构建动态消息的示例。由于库设计,没有用于此的异步 API - WithMessage 重载是静态的。将动态参数传递给 WithMessage 的其他方法很奇怪。
标签: c# asp.net asynchronous task-parallel-library async-await