Sahil、あなたはすべてのスレッドの結合がそれぞれ実行するのを待たずに呼び出されるようにして、何を達成しようとしていますか?パフォーマンスのためには、それはあまり役に立ちません。なぜなら、あなたがすべてのスレッド上でthread.joinを呼び出していても、先に進む前に各スレッドが終了するのを待たなければならないからです。 1つのstmt内のすべてのスレッド上で待機しているのは直接的な方法はありません
:
はとにかくあなたがする必要がある場合は、ここで私が言っているものです。代わりにいくつかの後にR & D私は少し間接的な方法を思い付いた。スレッドを初期化してParameterizedThreadDelegateを渡す代わりに、ParameterizedThreadDelegateで直接BeginInvokeを実行できます。 WaitHandle.WaitAllを使用すると、すべてのデリゲートが先に実行を完了するのを待つことができます。
class Program
{
static void Main(string[] args)
{
List<ParameterizedThreadStart> listDelegates = new List<ParameterizedThreadStart>();
listDelegates.Add(new ParameterizedThreadStart(DelegateEg.Print));
listDelegates.Add(new ParameterizedThreadStart(DelegateEg.Display));
List<WaitHandle> listWaitHandles = new List<WaitHandle>();
foreach (ParameterizedThreadStart t in listDelegates)
listWaitHandles.Add(t.BeginInvoke("In Thread", null, null).AsyncWaitHandle);
WaitHandle.WaitAll(listWaitHandles.ToArray());
Console.WriteLine("All threads executed");
Console.Read();
}
}
public class DelegateEg
{
public static void Print(object obj)
{
Console.WriteLine("In print");
Console.WriteLine(obj);
}
public static void Display(object obj)
{
Console.WriteLine("In Display");
Console.WriteLine(obj);
}
}
私は愚かだったと思います。フィッシャーは正しいです。既にうまく動作しています。 –
はい...私は同じことを暗示しました...とにかくそれは私にとって良いr&dでした:) –