gpt4 book ai didi

.net - Task.Run 作为反模式?

转载 作者:行者123 更新时间:2023-12-04 19:04:28 24 4
gpt4 key购买 nike

我在 WinRT 项目中使用 SQLite.NET PCL 库SQliteAsyncConnection类,提供经典 SQLiteConnection 的异步版本方法。但是,在项目的Github page声明如下:

Please be aware that the Task.Run pattern used in SQLiteAsyncConnection can be considered an anti-pattern (libraries should not provide async methods unless they are truly async). This class is maintained for backwards compatibility and for use-cases where async-isolation is handy



为什么使用 Task.Run在这种情况下被认为是反模式?这允许开发人员准确地实现他需要的目标 - 在应用程序保持响应用户输入的同时在单独的线程上运行数据库访问代码。手动写 Task.Run会更好吗?每次都使用片段而不完全使用类的异步版本?

这种模式有哪些潜在的问题和挫折?

最佳答案

是的。如果库的使用者明确声明他希望将该工作卸载到不同的线程(如果这种情况发生不止一次,他们可以像库一样拥有辅助方法)会更好。

否则他们可能会认为这个方法本质上是异步的。事实并非如此,除非您可以查看源代码,否则您无法知道。

更长的解释可以在 Should I expose asynchronous wrappers for synchronous methods? 中找到。 .具体来说:

I believe the only asynchronous methods that should be exposed are those that have scalability benefits over their synchronous counterparts. Asynchronous methods should not be exposed purely for the purpose of offloading: such benefits can easily be achieved by the consumer of synchronous methods using functionality specifically geared towards working with synchronous methods asynchronously, e.g. Task.Run.

关于.net - Task.Run 作为反模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28766042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com