SQLite - wie kann ich mögliche Konkurrenz zwischen zwei separaten Threads verarbeiten die gleiche Datenbank zugreifen?

StackOverflow https://stackoverflow.com/questions/2490432

  •  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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top