私はスレッドを選択したアプリケーションを持っています。この背後にある目的は、複数のスレッドを同時に実行してアプリケーションを高速化することです。C#スレッド非同期処理
現在、私はアプリケーション設定をループし、各設定のスレッドを作成し、それぞれを起動して、それらがすべて完了したときに通知します。
これを実行する際、各スレッドは同期して実行され、目的を破ります。
私は結合を削除するためにそれを変更することができましたが、すべてのスレッドが終了した時点を特定できません。(すべて完了した時点で実行する必要があります。
私はスレッディングが私のためではないと思っていますが、スレッディングタスクやparallel.foreachをもっと見なければなりませんが、どちらかの複雑さはわかりません。私は以下の
は現在、このスレッドを一つずつ実行し、最後の処理を実行する
現在foreach (SettingsProperty value in Properties.Settings.Default.Properties)
{
//parse out the line in the settings
if (value.Name.ToString() != <<criteria>>)
{
//this is one that we want to do something with
sett = value.DefaultValue.ToString().Split(stringSeparators, StringSplitOptions.None);
//set the directory
Directory.CreateDirectory(<<directory>>);
//fire the thread to retrieve the image form the url
ThreadWithState tws = new ThreadWithState(<<parameters>>);
Thread t = new Thread(new ThreadStart(tws.ThreadProc));
t.Start();
t.Join();
}
}
UploadFiles();
私のスレッドを生成コードスニペットであるメカニズムの前に(ともスレッドだけで手を出して)のいずれかを使用していません。 t.join呼び出しを削除すると、スレッド非同期が実行されますが、すべてのスレッドが完了する前にアップロードが実行されます。
どのように私はすべてのスレッドが終了するのを待つために、このコードを変更、または Parallel.ForEach(私は仕事かもしれないと思うが、全く理解していない)または は、いくつかのthreading.tasks機能を実装して実装することができますいずれかのように私(私も仕事かもしれないと思うが、全く理解していない)Task.WhenAll方法
なぜあなたは 't.Join()'を呼び出していますか? –
あなたの質問は広すぎます。並行して実行するには、有効な方法がたくさんあります。あなたのコードはそれらの方法のどれも試みません。先ほど起動したスレッドですぐに 'Join()'を呼び出すと、現在のスレッドが終了するまで別のスレッドを開始しません。別のスレッドを開始する前に待つ必要がない場合は、**しばらくお待ちください。 –
あなたは、適切なツールが何であるかを知っていると言います - 非同期ワークフローを構築する - あなたはそれを行う方法がわかりません。だから*それをやる方法を学ぶ*。これはチュートリアルのサイトではありません。並列ワークフローと非同期ワークフローの両方に関するチュートリアルがたくさんあります。行く!このようなIOバインドされたタスクでは、まず非同期ワークフローについて学習します。複数のスレッドを含む必要はありません。 –