Mar*_*und 5 .net task-parallel-library async-await
我正在使用SQLite.NET PCL库来获取我的WinRT项目,
SQliteAsyncConnection该类提供了经典SQLiteConnection方法的异步版本.但是,在项目的Github页面上,陈述如下:
请注意,使用的
Task.Run模式SQLiteAsyncConnection可以被视为反模式(库不应该提供异步方法,除非它们是真正的异步).维护此类是为了向后兼容,也适用于异步隔离很方便的用例
为什么Task.Run在这种情况下使用被认为是反模式?这允许开发人员实现他所需的目标 - 在应用程序保持响应用户输入的同时在单独的线程上运行数据库访问代码.Task.Run每次手动编写代码片段并不完全使用该类的异步版本会更好吗?
这种模式的潜在问题和挫折是什么?
是.如果库的使用者明确声明他想要将该工作卸载到不同的线程(如果它不止一次出现,他们可以像库那样有一个辅助方法),那会更好.
否则他们可能会认为这种方法本质上是异步的.情况并非如此,除非您可以查看源代码,否则您无法知道.
我可以在同步方法中公开异步包装器中找到更长的解释吗?.特别:
我认为应该暴露的唯一异步方法是那些具有可扩展性优于同步方法的方法.不应仅仅为了卸载而暴露异步方法:使用专门用于异步处理同步方法的功能的同步方法的消费者可以很容易地实现这样的好处,例如Task.Run.