为存储库创建异步和同步方法
本文关键字:同步方法 异步 创建 存储 | 更新日期: 2023-09-27 18:18:28
我有一个存储库,其中包含返回int
的方法Insert
(方法和类型在这里无关紧要(。我正在考虑为此存储库创建synchronous
并asynchronous
插入方法。对于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 用于提供SerializeAsync
和DeserializeAsync
方法,这些方法只是使用 Task.Factory.StartNew
的同步对应项的包装器。这些最终被淘汰,因为它们不会为 API 增加价值,并被视为潜在的可扩展性问题。导致此更改的完整讨论可以在此处找到:
https://github.com/JamesNK/Newtonsoft.Json/issues/66