为存储库创建异步和同步方法

时间:2016-11-18 08:29:17

标签: c# async-await task-parallel-library

我有一个方法Insert的存储库,它返回int(这里的方法和类型不相关)。我正在考虑为此存储库创建synchronousasynchronous插入方法。对于asynchronous方法,最好将synchronous Insert方法括在task中以避免代码重复?

1 个答案:

答案 0 :(得分:4)

不,这不是一个好习惯,正如微软的Stephen Toub所详述的那样:

https://blogs.msdn.microsoft.com/pfxteam/2012/03/24/should-i-expose-asynchronous-wrappers-for-synchronous-methods/

......和Stephen Cleary在这里:

http://blog.stephencleary.com/2013/11/taskrun-etiquette-examples-dont-use.html

长话短说,如果你所有的方法都是在Task.Run包裹一个同步电话,这是微不足道的,我确信来电者完全有能力自己做。除非你有一个自然的异步操作,否则不需要增加API的表面积(或者除非你知道将来你能够提供一个,因此希望消费者定位{{1从第一天开始的方法。

作为奖励,这里是从流行的库中删除异步包装器方法的真实例子:

JSON.NET过去常常使用XxxAsync提供SerializeAsyncDeserializeAsync方法,这些方法只是围绕同步对应方的包装器。这些最终被淘汰,因为它们没有为API增加价值,并被认为是潜在的可扩展性问题。可以在此处找到导致此更改的完整讨论:

https://github.com/JamesNK/Newtonsoft.Json/issues/66