SQLite不是异步的,并且公开的Microsoft.Data.SQLite ADO.net*Async
方法是在后台同步实现的。
我的问题是:如何在asp.net core5 API项目中使用SQLite,该项目可以从异步代码中受益,还可以使用async/await关键字来协调它?
我看到两个选项
- 使用";假的";
*Async
方法,并失去了异步代码对接触数据库的代码部分的好处。如果我理解正确的话,在.net内核中阻塞线程不会导致死锁(https://blog.stephencleary.com/2017/03/aspnetcore-synchronization-context.html)。如果我理解正确的话,这就像在线程池线程上执行同步代码一样,增加了异步/等待机制的开销 - 只编写同步代码,会失去部分代码的好处
你认为哪一个更好?
谢谢!
我倾向于使用同步Async
方法,但这不是一个强烈的偏好。我更喜欢Async
的唯一原因是为了防止将来使用不同的数据库,或者SQLite在未来的版本中获得真正的异步方法。
你肯定想避免的是await Task.Run
。