Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.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,当我使用 int event_idx = WaitHandle.WaitAny(ExportEvents.ToArray()); 如果事件在WaitAny函数调用之前处于信号状态,则WaitAny函数将: 立即生成此事件id 跳过此事件,永远不会产生此id ?这取决于等待句柄的类型以及是否有其他线程正在等待。如果所有事件都具有手动重置特征,则If结果将为imedidiate。如果存在自动重置事件,并且另一个线程正在等待相同的事件,则需要知道哪个线程将被通知。这取决于等待句柄的类型以及是否有其他

当我使用

int event_idx = WaitHandle.WaitAny(ExportEvents.ToArray());
如果事件在
WaitAny
函数调用之前处于信号状态,则
WaitAny
函数将:

  • 立即生成此事件id
  • 跳过此事件,永远不会产生此id

  • 这取决于等待句柄的类型以及是否有其他线程正在等待。如果所有事件都具有手动重置特征,则If结果将为imedidiate。如果存在自动重置事件,并且另一个线程正在等待相同的事件,则需要知道哪个线程将被通知。

    这取决于等待句柄的类型以及是否有其他线程正在等待。如果所有事件都具有手动重置特征,则If结果将为imedidiate。如果存在自动重置事件,并且另一个线程正在等待相同的事件,则需要知道哪个线程将收到信号。

    来自:

    当任何句柄发出信号时,此方法返回

    通知是说它在句柄发出信号时返回,而不是在句柄发出信号时返回。这意味着,如果某个句柄已经发出信号,该方法将立即返回

    当然,句柄可能在调用前处于信号状态,但在调用过程中由于竞争条件而未发出信号。

    来自:

    当任何句柄发出信号时,此方法返回

    通知是说它在句柄发出信号时返回,而不是在句柄发出信号时返回。这意味着,如果某个句柄已经发出信号,该方法将立即返回


    当然,在调用之前,句柄可能处于有信号状态,但在调用过程中,由于竞争条件,句柄没有发出信号。

    我想问同样的问题,因为我阅读的文档只保证
    WaitAny()
    会响应在方法调用期间设置的事件。对我来说,“is signed”在现在时可能意味着(与“was signed”相反);“信号”是一种行为,而不是一种状态。此外,在当前版本的链接文档(emphasis mine)中,方法摘要是“等待指定数组中的任何元素接收信号”(现在时态),并且引用的元素后面的句子开始“如果调用过程中有多个对象发出信号…”。现在,使用.NET Framework和Core进行测试,我看到
    WaitAny()
    在传递一个有信号的事件时确实会立即返回,而且上面提到的“在调用期间”限定符似乎是不必要的,因为当传递多个在调用之前有信号的事件时,它也会像文档中描述的那样工作。我还不确定的是,这是否都是由于实现细节或只是不清楚(对我来说,无论如何)文档。@培根,如果您认为文档不清楚,请考虑。我会问同样的问题,因为我阅读文档只保证<代码> WaITAY()。将响应方法调用期间设置的事件。对我来说,“is signed”在现在时可能意味着(与“was signed”相反);“信号”是一种行为,而不是一种状态。此外,在当前版本的链接文档(emphasis mine)中,方法摘要是“等待指定数组中的任何元素接收信号”(现在时态),并且引用的元素后面的句子开始“如果调用过程中有多个对象发出信号…”。现在,使用.NET Framework和Core进行测试,我看到
    WaitAny()
    在传递一个有信号的事件时确实会立即返回,而且上面提到的“在调用期间”限定符似乎是不必要的,因为当传递多个在调用之前有信号的事件时,它也会像文档中描述的那样工作。我还不确定的是,这是否都是由于实现细节或只是不清楚(对我来说,无论如何)文档。@培根,如果您认为文档不清楚,请考虑。