我正在使用SQLite(System.Data.SQLite.dll)在一个多线程的Windows桌面程序中。我使用以下代码:
using (var cn = new SQLiteConnection(connectionString))
{
cn.Open();
using (var tx = cn.BeginTransaction())
{
// do some work here
tx.Commit();
}
}
我正在使用8个并发线程同时向数据库写入数据,这会对程序进行压力测试。有时我会在Visual Studio的输出窗口看到以下信息:
SQLite error (517): statement aborts at 1: [BEGIN IMMEDIATE] database is locked
但是,根本没有抛出任何异常,一切都按预期工作。所以我猜测当SQLConnection.BeginTrasaction()接收到SQLite错误(517)数据库被锁定时,它会进行重试。
我猜测正确吗?
如果是的话,SQLConnection.BeginTransaction重试多少次才会抛出异常?这个可以配置吗?