Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 等待线程完成的标准方法_C#_Multithreading - Fatal编程技术网

C# 等待线程完成的标准方法

C# 等待线程完成的标准方法,c#,multithreading,C#,Multithreading,在另一个线程中等待进程完成的标准方式是什么 在我的例子中,我有一个多线程服务,我希望确保当请求服务停止时,处理在服务退出之前完成。我应该使用吗?您可以保留一个列表,当服务停止时,调用线程。依次加入其中的每个线程。这将一直等到每个人都退出。您可以保留一个列表,当服务停止时,调用线程。依次加入每个线程。这将一直等到每个线程都退出。如果有对等待完成的线程的引用,可以对这些引用调用.Join()方法。这将导致主线程等待调用.Join()的线程完成后再继续 或者,您可以创建一个ManualResetEve

在另一个线程中等待进程完成的标准方式是什么


在我的例子中,我有一个多线程服务,我希望确保当请求服务停止时,处理在服务退出之前完成。我应该使用吗?

您可以保留一个列表,当服务停止时,调用线程。依次加入其中的每个线程。这将一直等到每个人都退出。

您可以保留一个列表,当服务停止时,调用线程。依次加入每个线程。这将一直等到每个线程都退出。

如果有对等待完成的线程的引用,可以对这些引用调用.Join()方法。这将导致主线程等待调用.Join()的线程完成后再继续

或者,您可以创建一个ManualResetEvents数组,主线程和子线程都可以访问该数组。每个子线程都有一个对主线程有权访问的数组中的一个事件的引用。在主线程末尾的事件数组上调用WaitHandle.WaitAll(事件数组),并在每个子线程末尾的事件上调用.Set(),以指示主线程子线程已完成

在主线程退出之前,以下将一直阻止,直到所有子线程对其事件调用.Set()


WaitHandle.WaitAll(事件数组)

如果有对等待完成的线程的引用,可以对这些引用调用.Join()方法。这将导致主线程等待调用.Join()的线程完成后再继续

或者,您可以创建一个ManualResetEvents数组,主线程和子线程都可以访问该数组。每个子线程都有一个对主线程有权访问的数组中的一个事件的引用。在主线程末尾的事件数组上调用WaitHandle.WaitAll(事件数组),并在每个子线程末尾的事件上调用.Set(),以指示主线程子线程已完成

在主线程退出之前,以下将一直阻止,直到所有子线程对其事件调用.Set()


WaitHandle.WaitAll(事件数组)

我想你的意思是“等待线程完成的标准方法”。进程有线程,而不是相反。我想你的意思是“等待线程完成的标准方法”。进程有线程,反之亦然。请记住,WaitAll最多只允许64个句柄等待。在service stop事件处理程序中,您可能需要迭代所有事件并在所有句柄上显式调用WaitOne。请记住,WaitAll最多只允许64个句柄等待。在service stop事件处理程序中,您可能需要迭代所有句柄事件并在所有句柄上显式调用WaitOne