c# - 如何同时实现异步方法及其对应的同步方法?

标签 c# .net task-parallel-library

<分区>

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

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

最佳答案

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

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
}

逻辑的重复当然是不幸的,但如果你试图走捷径,你实际上会陷入更糟糕的境地。 “为什么”的细节对于 SO 答案来说有点长,但 Stephen Toub 涵盖了在他的经典博客文章中包装时出现的问题 "Should I expose synchronous wrappers for asynchronous methods?""Should I expose asynchronous wrappers for synchronous methods?"

顺便说一句,这两个问题的答案都是“否”。另请参阅 my SO answer here .

关于c# - 如何同时实现异步方法及其对应的同步方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19865823/

相关文章:

c# - 整洁架构中 Entity Framework 的实现

c# - WCF 通信中的消息过大

javascript - 如何向在后面的 C# 代码中创建的 div 添加 onclick 事件?

c# - 在 .NET 4.0 和 C# 4.0 中使用基于任务的异步模式 (TAP)

c# - 使用 while(true) 定期执行任务

c# - 将 XML 注释移动到单独的文件

android - 解压缩 zip 文件给出 "java.util.zip.ZipException: Cannot read version"或 "java.util.ZipException Cannot read local header version 45"

.net - 无法正确引用 MSHTML

c# - 正在运行任务的关闭表单

c# - 在 asp.net mvc 3 和 jquery 中记录帖子