マルチスレッド アプリケーションを操作する場合、 SQL Server データベース操作が関係する場合、デッドロックは避けられない課題です。デッドロックの原因を理解し、その影響を最小限に抑える戦略を実装することが重要です。
独自のスレッド ソリューションを展開する代わりに、TaskParallel ライブラリの活用を検討してください。このアプローチにより、次の手順を実行できます。
TaskParallel ライブラリとデッドロック処理の使用方法の例を次に示します。
using (var dc = new TestDataContext()) { List<int> ids = dc.TestItems.Where(...).Select(item => item.Id).ToList(); List<ErrorType> problematicIds = new List<ErrorType>(); Parallel.ForEach(ids, new ParallelOptions { MaxDegreeOfParallelism = 8 }, id => CalculateDetails(id, problematicIds)); } private static void CalculateDetails(int id, List<ErrorType> problematicIds) { try { DeadlockRetryHelper.Execute(() => CalculateDetails(id)); } catch (Exception e) { problematicIds.Add(new ErrorType(id, e)); } }
CalculateDetails メソッドでは、TransactionScope を使用してデータベース操作を using ステートメント内にラップして、トランザクションを制御できます。分離レベルとデッドロックが発生した場合の操作の再試行。
以上がC# の TaskParallel ライブラリはマルチスレッド SQL Server アプリケーションのデッドロックを防ぐのにどのように役立ちますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。