异步方法及其同步方法如何实现?我有一个像TaskGetContentAsync(stringurl)这样的方法,我的控制台应用程序还没有准备好在内部使用TPL,但也许将来会。我如何轻松地为此(或其他)方法编写同步包装器(不是替代实现)?如果您的库需要同时实现同步和异步成员,那么您可以同时实现两者。没有捷径(假设这是一个可重用的库)。publicasyncTaskGetContentAsync(stringurl){...//这里的逻辑,例如,使用HttpClient}publicstringGetContent(stringurl){...//这里的逻辑重复,例如,使用WebClient}重复的逻辑绝对是不幸的,但如果你试图走捷径,你实际上会陷入更糟糕的境地。“为什么”的细节对于SO回答来说有点长,但StephenToub涵盖了他的经典博客文章“我应该为异步方法公开同步包装器吗?”中出现的问题。和“我应该为同步方法公开一个异步包装器吗?”顺便说一句,这两个问题的答案都是“否”。另请参阅此处的答案。下面是测试用例的代码,表明这可以通过一种非常简单的方式完成。出于演示目的,我还实现了GetContentAsync方法。使用System.IO;使用System.Net;使用System.Threading.Tasks;namespaceAsyncTestCase.Driver{publicclassAsyncTestCase{publicAsyncTestCase(){}publicstringGetContent(stringurl){Tasktask=this.GetContentAsync(url);返回任务。结果;}publicasyncTaskGetContentAsync(stringurl){HttpWebRequestrequest=HttpWebRequest.CreateHttp(url);HttpWebResponseresponse=awaitrequest.GetResponseAsync()asHttpWebResponse;使用(Streamusingstream=response){(TextReaderreader=newStreamReader(stream)){stringcontent=awaitreader.ReadToEndAsync();返回内容;}}}}}下面的代码表明它工作正常并且易于使用:以上是C#学习教程:如何实现异步方法及其同步方法?如果分享的内容对你有用,需要进一步了解C#学习教程,希望你多多关注—();字符串内容=测试。GetContent("http://www.google.com");}}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
