sqlite - come posso gestire il potenziale conflitto tra due thread separati che accedono allo stesso database?
-
21-09-2019 - |
Domanda
DOMANDA: Come posso gestire il potenziale conflitto tra due thread separati l'accesso alla stessa database SQLite
BACKGROUND: Ho un'applicazione C # WinForms che usa SQLite via ADO.net. Ho un filo BackgroundWorker nell'applicazione WinForms. Ho notato che posso ottenere un'eccezione quando sia il thread principale, e lo sfondo thread di lavoro, cercano di aggiornare il database SQLite, cioè chiamando un DBDataAdaptor.Update () ..
Quindi sono interessato a quello che controlla il mio codice (anche se il codice thread principale e / o il codice che viene eseguito in BackgroundWorker) per gestire questa grazia, sia tramite un modo per controllare in anticipo, o il blocco fino a quando OK, o alzando un errore specifico riesco ad afferrare ...
grazie
Soluzione
In SQLite è possibile configurare un callback che si attiva quando si verifica un errore di SQLITE_BUSY
o SQLITE_IOERR_BLOCKED
(vedi http://www.sqlite.org/c3ref/busy_handler.html ).
Come la maggior parte del tempo ciò che ci si vuole fare è dormire e riprovare la query su occupato, SQLite è dotato di un callback che fa esattamente questo; leggere su sqlite3_busy_timeout
a http://www.sqlite.org/c3ref/busy_timeout.html.