Sahil,您通过确保调用所有线程上的连接而不必等待每个线程执行来试图实现什么?如果它是为了性能,它不会有太大帮助,因为无论如何,即使您在所有线程上调用 thread.join,它也必须等待每个线程完成才能继续前进。
无论如何,如果您必须这样做,那么这就是我要说的:
没有直接的方法可以在一个 stmt 中等待所有线程。相反,经过一些研发后,我想出了一些间接的方法。您可以直接在 ParameterizedThreadDelegate 上执行 BeginInvoke,而不是初始化线程并将 ParameterizedThreadDelegate 传递给它。然后您可以使用 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);
}
}