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

本文关键字:同步方法 异步 创建 存储 | 更新日期: 2023-09-27 18:18:28

我有一个存储库,其中包含返回int的方法Insert(方法和类型在这里无关紧要(。我正在考虑为此存储库创建synchronousasynchronous插入方法。对于asynchronous方法,将synchronous Insert方法括在task中以避免代码重复是否是一种好的做法?

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

不,这不是一个好的做法,正如Microsoft的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 礼仪示例不使用.html

长话短说,如果你的方法所做的只是将同步调用包装在Task.Run中,那是微不足道的,我相信调用者完全有能力自己做。无需增加 API 的外围应用,除非您有一个自然异步操作(或者除非您知道将来您将能够提供一个异步操作,因此希望使用者从第一天起就以XxxAsync方法为目标(。

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

JSON.NET 用于提供SerializeAsyncDeserializeAsync方法,这些方法只是使用 Task.Factory.StartNew 的同步对应项的包装器。这些最终被淘汰,因为它们不会为 API 增加价值,并被视为潜在的可扩展性问题。导致此更改的完整讨论可以在此处找到:

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