Task.WaitAny的最大任务数
本文关键字:任务 WaitAny Task | 更新日期: 2023-09-27 18:05:48
我正在创建一个系统,它将生成许多工作线程任务,在我的应用程序的某个地方,我正在执行一个Task.WaitAny来检索第一个完成的任务。
我担心的是我可以向 WaitAny 发送多少个任务,我知道 WaitHandle 的 WaitAny/All 最多只能支持 64 个等待句柄,我不确定 Task.WaitAny 上的底层机制是否使用内部等待句柄来等待完成的任务,因此这些限制适用于它们。
可以传递给 Task.WaitWait 的任务数量是否有任何限制,就像 WaitHandle 一样,或者没有限制?
干杯。
据我所知,它通过在内部将延续链接到所有任务来工作:http://referencesource.microsoft.com/#mscorlib/system/threading/Tasks/TaskFactory.cs,db51a91904616672
(通过内部优化,以及一些代码来处理多个任务同时结束时的赛车条件(
因此,对 WaitHandle 的限制不应在此处适用。
内部Task.WaitAny
正在调用TaskFactory.CommonCWAnyLogic
,它正在计划您传入的每个任务的延续,该延续标记了数组中的哪个索引并允许任务完成。它使用内部类CompleteOnInvokePromise
,可以被认为是一种专门的TaskCompletionSource
。
由于它使用的是任务延续而不是等待句柄,因此不应应用等待句柄限制。