В SQLite все транзакции (явные и автоматические) являются сериализуемыми.
По умолчанию транзакции SQLite имеют значение DEFERRED , что означает, что блокировки чтения / записи принимаются только тогда, когда файл базы данных действительно требуется для чтения / записи (а запись обычно происходит только тогда, когда кэши сбрасываются, когда транзакция совершается).
В режиме отката журнала читатели и писатель блокируют друг друга; в режиме WAL читатели и записывающее устройство могут одновременно обращаться к БД, но при этом может быть только один записывающий.
Однако Xamarin не использует значения по умолчанию; BeginTransaction () немедленно запускает транзакцию в режиме EXCLUSIVE, что означает, что она конфликтует со всеми другими параллельными транзакциями. (Режим WAL не имеет значения.)
Очевидно, вы не должны использовать какой-либо параллелизм в Xamarin.