我正在将 SQLite.NET PCL 库用于我的 WinRT 项目SQliteAsyncConnection
类,它提供经典的异步版本SQLiteConnection
方法。然而,就该项目而言Github页面 https://github.com/oysteinkrog/SQLite.Net-PCL声明如下:
请注意,Task.Run
模式用于SQLiteAsyncConnection
可以被认为是一种反模式(库
不应提供异步方法,除非它们确实是异步的)。这
维护类是为了向后兼容和用例
异步隔离很方便的地方
为什么使用Task.Run
在这种情况下被认为是反模式吗?这使得开发人员能够准确地实现他需要的目标 - 在单独的线程上运行数据库访问代码,同时应用程序保持对用户输入的响应。手动写会更好吗Task.Run
每次都片段而不是完全使用该类的异步版本?
这种模式有哪些潜在的问题和挫折?
是的。如果库的使用者明确声明他想要将该工作卸载到不同的线程(如果这种情况发生多次,他们可以像库一样拥有辅助方法),那就更好了。
否则他们可能会认为此方法本质上是异步的。事实并非如此,除非您可以查看源代码,否则您无法知道这一点。
更长的解释可以在我应该为同步方法公开异步包装器吗? http://blogs.msdn.com/b/pfxteam/archive/2012/03/24/10287244.aspx。具体来说:
我相信唯一应该公开的异步方法是那些比同步方法具有可扩展性优势的方法。异步方法不应纯粹出于卸载的目的而公开:同步方法的使用者可以使用专门针对异步使用同步方法的功能轻松实现此类好处,例如任务.运行.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)