Сахиль, чего ты пытаешься достичь, убедившись, что вызовы всех потоков вызываются без ожидания выполнения каждого из них? Если это для производительности, это не сильно поможет, так как в любом случае, даже если вы вызываете поток. Присоединяйтесь ко всем потокам, он должен ждать завершения каждого потока, прежде чем продолжить.
В любом случае, если нужно, вот что я должен сказать:
Не существует прямого метода ожидания для всех потоков в одном 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);
}
}