SQLite - wie kann ich mögliche Konkurrenz zwischen zwei separaten Threads verarbeiten die gleiche Datenbank zugreifen?
-
21-09-2019 - |
Frage
FRAGE: Wie kann ich mögliche Konkurrenz zwischen zwei getrennten Threads behandeln die gleiche SQLite-Datenbank zugreifen
HINTERGRUND: Ich habe eine C # WinForms-Anwendung, die SQLite über ADO.net verwendet. Ich mache in der WinForms-Anwendung ein Background Gewinde haben. Ich habe bemerkt, dass ich eine Ausnahme erhalten, wenn sowohl der Haupt-Thread, und der Hintergrund-Worker-Thread, versuchen, die SQLite-Datenbank zu aktualisieren, das heißt eine DBDataAdaptor.Update () aufgerufen wird ..
Also ich bin daran interessiert, was überprüft meinen Code (wenn auch Haupt-Thread Code & / oder Code, der ausgeführt wird in Background) diese ordnungsgemäß zu handhaben, entweder über einen Weg im Voraus zu überprüfen, oder bis OK Sperrung oder einen bestimmten Fehler erhöhen ich kann fangen ...
Dank
Lösung
SQLite Sie einen Rückruf konfigurieren können, die ausgelöst wird, wenn Sie einen SQLITE_BUSY
oder SQLITE_IOERR_BLOCKED
Fehler auftreten (siehe http://www.sqlite.org/c3ref/busy_handler.html ).
Wie die meiste Zeit, was Sie wollen würde, ist zu tun, schlafen und wiederholen Sie die Abfrage bei Besetzt, SQLite in Rückruf eine gebaut hat, die genau das tut; lesen Sie auf sqlite3_busy_timeout
unter http://www.sqlite.org/c3ref/busy_timeout.html.