Кто не в курсе запись в SQLite работает только эксклюзивная, и только чтение из sqlite-базы можно паралельно выполнять.
Кто как решает проблему?
Есть 2 подхода:
1) Retry Pattern, например
http://www.thepollyproject.org/
Он так же может использоваться для борьбы с dead-lock-ами в нормальных СУДБ. Ну неплохо как бы, но менее надежно чем второй способ.
2)
Заворачивать блоки чтения в ReadWriterLock на чтение, и блоки кода с записью в БД в ReadWriterLock на запись.
Работает надежно по сравнению с 1м, но для обычных СУДБ не нужно.
Для второго подхода что можно подсмотреть готовое?. Приходит на ум только такой класс MyLock
using(var lockPolicy = MyLock.Readonly)
{
/// читаем из базы
if (needWrite)
{
lockPolicy.UpgradeToWriting();
// пишем в БД
}
}
...
using(MyLock.ReadWrite)
{
/// пишем в базу
}
Интересует как бы это завернуть в DI майкрософтовский. Если это имеет смысл.