sqlite - 同じデータベースにアクセスする 2 つの別個のスレッド間で潜在的な競合を処理するにはどうすればよいですか?
-
21-09-2019 - |
質問
質問:同じ Sqlite データベースにアクセスする 2 つの別個のスレッド間で潜在的な競合を処理するにはどうすればよいですか?
背景:ADO.net 経由で Sqlite を使用する C# Winforms アプリケーションがあります。winforms アプリケーションにはバックグラウンドワーカー スレッドがあります。メインスレッドとバックグラウンドワーカースレッドの両方が SQLite データベースを更新しようとすると、例外が発生する可能性があることに気づきました。DBDataAdaptor.Update() を呼び出します。
したがって、事前にチェックする方法、OKになるまでブロックする方法、またはキャッチできる特定のエラーを発生させる方法のいずれかを介して、これを適切に処理するためにコード(メインスレッドコードおよび/またはバックグラウンドワーカーで実行されるコードであっても)をチェックするものに興味があります。 ...
ありがとう
解決
sqlite では、次のエラーが発生したときにトリガーされるコールバックを構成できます。 SQLITE_BUSY
または SQLITE_IOERR_BLOCKED
エラー (参照 http://www.sqlite.org/c3ref/busy_handler.html).
ほとんどの場合、やりたいことはスリープしてビジー時にクエリを再試行することなので、sqlite にはまさにそれを行うコールバックが組み込まれています。よく読んで sqlite3_busy_timeout
で http://www.sqlite.org/c3ref/busy_timeout.html.
所属していません StackOverflow