SQLite - comment puis-je gérer contention potentiel entre deux threads séparés accédant à la même base de données?

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

  •  21-09-2019
  •  | 
  •  

Question

QUESTION: Comment puis-je gérer discorde potentiel entre deux threads séparés l'accès à la même base de données SQLite

CONTEXTE: J'ai une application C # Winforms qui utilise SQLite via ADO.net. J'ai un fil BackgroundWorker dans l'application WinForms. Je l'ai remarqué que je peux faire une exception quand les deux le fil principal et le thread de travail de fond, tentent de mettre à jour la base de données SQLite, à savoir appeler un DBDataAdaptor.Update () ..

Je suis intéressé par ce que vérifie mon code (quoique principal code fil et / ou un code qui fonctionne dans BackgroundWorker) pour gérer cette grâce, soit par un moyen de vérifier au préalable, ou de bloquer jusqu'à ce que OK, ou soulevant une erreur spécifique Je peux attraper ...

Merci

Était-ce utile?

La solution

Dans sqlite vous pouvez configurer un rappel qui est déclenchée lorsque vous rencontrez une erreur de SQLITE_BUSY ou SQLITE_IOERR_BLOCKED (voir http://www.sqlite.org/c3ref/busy_handler.html ).

Comme la plupart du temps ce que vous voulez faire est dormir et essayer de nouveau la requête sur occupation, sqlite a construit dans le rappel qui fait exactement cela; lire sur sqlite3_busy_timeout http://www.sqlite.org/c3ref/busy_timeout.html.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top