私は、データを抽出する大きなディレクトリで実行され、言語コード(ディレクトリ内のファイルの最初のレベル)ごとにスレッドを開始するツールを作成しています。ツールがデッドロック状態に陥っていたため、すべてのスレッドが終了するまでスレッドがデータベースに追加されないようにするループを追加しました。ただし、このデータをテストする場合、テストデータが静的であっても、DBは間違った量の言語を格納しています。たとえば、私は67の言語を持っていますが、私のDBには48の言語しかありません。問題は、スレッドが停止する前にプログラムの進行を停止するためのループが壊れている可能性があることだと思います。すべてのスレッドが停止する前にDBにファイルを追加しているため、途中で言語が失われます。誰かが同様の問題に遭遇した、またはこの問題を解決する方法を知っているとは思いませんか?ありがとう。
//get the languages from the folders
string[] filePaths = Directory.GetDirectories(rootDirectory);
for (int i = 0; i < filePaths.Length; i++)
{
string LCID = filePaths[i].Split('\\').Last();
Console.WriteLine(LCID);
//go through files in each folder and sub-folder with threads
Thread t1 = new Thread(() => new HBScanner(new DirectoryInfo(filePaths[i - 1])).HBscan());
t1.Start();
threads.Add(t1);
}
// wait for all threads to complete before proceeding
foreach (Thread thread in threads)
{
while (thread.ThreadState != ThreadState.Stopped)
{
//wait
}
}