我有一段使用lock的代码:
lock (l)
{
db2.BeginTransaction();
try
{
rc1 = db2.Execute(s);
db2.Commit();
}
catch (Exception ex)
{
db2.Rollback();
Crashes.TrackError(ex,
new Dictionary<string, string> {
{"RunExecute", "Exception"},
{"sql", s },
{"Device Model", DeviceInfo.Model },
});
throw;
}
}以及其他不支持的代码:
db2.Insert(new QuizHistory()
{
QuizId = quiz,
Cards = (App.viewablePhrases ?? GetViewablePhrases(MO.Quiz)).Count,
Score = score,
UtcNow = (int)Math.Truncate(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds),
Viewed = 1,
Deck = Helpers.Deck.GetTitle()
});为了减少出现问题的可能性,我应该在访问数据库的所有代码周围添加lock(l)吗?
发布于 2020-01-31 16:17:29
一次只能为一个线程提供对SQLite数据库的访问。
如果您使用SQLite-Net-PCL库来操纵SQLite数据库,那么您应该考虑使用asynchronous API来实现对SQLite数据库多线程并发访问。
有关SQLite数据库多线程支持的更多信息,请参阅official documentation和related question
https://stackoverflow.com/questions/59092880
复制相似问题