问题:如何处理访问同一Sqlite数据库的两个独立线程之间的潜在争用?
背景:我有一个C#Winforms应用程序,它通过ADO.net使用Sqlite。我在winforms应用程序中有一个backgroundworker线程。我注意到当主线程和后台工作线程都尝试更新sqlite数据库时,我可以得到一个异常,即调用DBDataAdaptor.Update()..
所以我对检查我的代码(虽然主线程代码和/或运行在后台工作程序中的代码)以优雅的方式处理这个问题感兴趣,或者通过预先检查的方式,或者阻塞直到OK,或者提出特定的错误我能抓住......
感谢
答案 0 :(得分:1)
在sqlite中,您可以配置在遇到SQLITE_BUSY
或SQLITE_IOERR_BLOCKED
错误时触发的回调(请参阅http://www.sqlite.org/c3ref/busy_handler.html)。
大多数时候你想要做的就是睡觉并在忙碌时重试查询,sqlite有一个内置的回调,就是这样做的;阅读sqlite3_busy_timeout
http://www.sqlite.org/c3ref/busy_timeout.html上的{{1}}。