如何实现异步方法及其同步方法?

Mic*_*ray 6 .net c# task-parallel-library

我有一个方法,例如Task<string> GetContentAsync(string url),我的控制台应用程序还没有完全准备好在内部利用TPL,但可能在以后它会.

如何为这个(或其他)方法轻松编写同步包装器(不是替代实现)?

Ste*_*ary 11

如果您的库需要同时实现同步和异步成员,那么您实现这两个成员.没有快捷方式(假设这是一个可重用的库).

public async Task<string> GetContentAsync(string url)
{
  ... // Logic here, e.g., using HttpClient
}

public string GetContent(string url)
{
  ... // Duplicate logic here, e.g., using WebClient
}
Run Code Online (Sandbox Code Playgroud)

重复逻辑肯定是不幸的,但如果你试图走捷径,你实际上会陷入更糟糕的境地.对于SO答案,"为什么"的细节有点长,但Stephen Toub涵盖了在他的经典一对博客文章"我是否应该为异步方法公开同步包装器?"时出现的问题."我应该为同步方法公开异步包装器吗?"

顺便说一下,这两个问题的答案都是"不".另见这里的答案.

  • @ MichaelJ.Gray:我知道你想要一个简单的包装器.我的观点是你不能拥有它.:) (3认同)