Task.WaitAny的最大任务数

本文关键字:任务 WaitAny Task | 更新日期: 2023-09-27 18:05:48

我正在创建一个系统,它将生成许多工作线程任务,在我的应用程序的某个地方,我正在执行一个Task.WaitAny来检索第一个完成的任务。

我担心的是我可以向 WaitAny 发送多少个任务,我知道 WaitHandle 的 WaitAny/All 最多只能支持 64 个等待句柄,我不确定 Task.WaitAny 上的底层机制是否使用内部等待句柄来等待完成的任务,因此这些限制适用于它们。

可以传递给 Task.WaitWait 的任务数量是否有任何限制,就像 WaitHandle 一样,或者没有限制?

干杯。

Task.WaitAny的最大任务数

据我所知,它通过在内部将延续链接到所有任务来工作:http://referencesource.microsoft.com/#mscorlib/system/threading/Tasks/TaskFactory.cs,db51a91904616672
(通过内部优化,以及一些代码来处理多个任务同时结束时的赛车条件(

因此,对 WaitHandle 的限制不应在此处适用。

内部Task.WaitAny正在调用TaskFactory.CommonCWAnyLogic,它正在计划您传入的每个任务的延续,该延续标记了数组中的哪个索引并允许任务完成。它使用内部类CompleteOnInvokePromise,可以被认为是一种专门的TaskCompletionSource

由于它使用的是任务延续而不是等待句柄,因此不应应用等待句柄限制。