如果我正在为我的团队制作一个图书馆,这个图书馆将在多个项目之间共享,而图书馆正在开展工作,可以成为async/await
的理想人选,我是否还应该包含非异步/等待版本的代码?它看起来像很多重复的代码,但我没有看到任何替代方案。这仅仅是你有能力增加线程池利用率所付出的代价吗?当我创建异步版本时,是否应始终包含同步版本的方法?
只是要清楚,我不是问我是否应该包含同步包装方法,这是我所能找到的答案。
例如,我可能有一个长时间运行的SQL查询。然后我需要用两种几乎相同的方法来实现这个接口,一种方法使用SqlConnection
和SqlCommand
上的async
方法,另一种方法不使用它们。这是正确的方法还是我错过了什么?
public interface ILongRunningOperation
{
Response LongRunningOperation();
Task<Response> LongRunningOperationAsync();
}
谢谢!
没有。不要忘记,你也可以使用LongRunningOperation()的同步形式。达到相同的结果。这是一个晦涩的延伸,并且经常被忽视。 – JamieMeyer
博客文章[我应该公开异步方法的同步包装?](https://blogs.msdn.microsoft.com/pfxteam/2012/04/13/should-i-expose-synchronous-wrappers-for-asynchronous-方法/)总结:“请尽量不要;如果必要的话,请将其留给您的方法的使用者;您应该考虑有人会同步使用您的功能的可能性,因此相应编码,尽可能穿线的环境。“ – BACON
相关:[新库中的异步与非异步方法](http://stackoverflow.com/q/25968037/150605) – BACON