异步项目中如何处理SQLite
How to deal with SQLite in an asynchronous project
SQLite 不是异步的,公开的 Microsoft.Data.Sqlite ADO.net *Async
方法在后台是同步实现的。
我的问题:您将如何在 asp.net 核心 5 API 项目中使用 SQLite,它可以受益于异步代码,以及 async/await 关键字来协调它?
我看到两个选项
- 使用“假”
*Async
方法,并失去接触数据库的代码部分的异步代码的好处。如果我理解正确的话,在.net core 中阻塞一个线程不会导致死锁(https://blog.stephencleary.com/2017/03/aspnetcore-synchronization-context.html)。如果我理解正确的话,这就像在线程池线程上执行同步代码一样,增加了 async/await 机器的开销。
- 只写同步代码,失去部分代码的好处
你觉得哪个更好?
谢谢!
我倾向于使用同步 Async
方法,但这不是一个强烈的偏好。我更喜欢 Async
的唯一原因是以防万一将来使用不同的数据库,或者 SQLite 在将来的版本中获得 real 异步方法。
你绝对想避免的是await Task.Run
。
SQLite 不是异步的,公开的 Microsoft.Data.Sqlite ADO.net *Async
方法在后台是同步实现的。
我的问题:您将如何在 asp.net 核心 5 API 项目中使用 SQLite,它可以受益于异步代码,以及 async/await 关键字来协调它?
我看到两个选项
- 使用“假”
*Async
方法,并失去接触数据库的代码部分的异步代码的好处。如果我理解正确的话,在.net core 中阻塞一个线程不会导致死锁(https://blog.stephencleary.com/2017/03/aspnetcore-synchronization-context.html)。如果我理解正确的话,这就像在线程池线程上执行同步代码一样,增加了 async/await 机器的开销。 - 只写同步代码,失去部分代码的好处
你觉得哪个更好?
谢谢!
我倾向于使用同步 Async
方法,但这不是一个强烈的偏好。我更喜欢 Async
的唯一原因是以防万一将来使用不同的数据库,或者 SQLite 在将来的版本中获得 real 异步方法。
你绝对想避免的是await Task.Run
。