sqlite - 如何处理访问同一数据库的两个独立线程之间的潜在争用?

时间:2010-03-22 06:52:19

标签: sqlite ado.net contention

问题:如何处理访问同一Sqlite数据库的两个独立线程之间的潜在争用?

背景:我有一个C#Winforms应用程序,它通过ADO.net使用Sqlite。我在winforms应用程序中有一个backgroundworker线程。我注意到当主线程和后台工作线程都尝试更新sqlite数据库时,我可以得到一个异常,即调用DBDataAdaptor.Update()..

所以我对检查我的代码(虽然主线程代码和/或运行在后台工作程序中的代码)以优雅的方式处理这个问题感兴趣,或者通过预先检查的方式,或者阻塞直到OK,或者提出特定的错误我能抓住......

感谢

1 个答案:

答案 0 :(得分:1)

在sqlite中,您可以配置在遇到SQLITE_BUSYSQLITE_IOERR_BLOCKED错误时触发的回调(请参阅http://www.sqlite.org/c3ref/busy_handler.html)。

大多数时候你想要做的就是睡觉并在忙碌时重试查询,sqlite有一个内置的回调,就是这样做的;阅读sqlite3_busy_timeout http://www.sqlite.org/c3ref/busy_timeout.html上的{{1}}。

相关问题