當將多個完成的任務傳遞給Task.WhenAny時,Task.WhenAny會優先選擇完成哪個任務任務將被返回?是否Task.WhenAny優先考慮某些任務而非其他任務?
1
A
回答
1
當你想知道確切的行爲,你可以經常檢查reference source。例如,WhenAny
可以找到here。
當翻翻源,注意,返回的任務不是你的任務之一,但內部創建的任務(無論是CompleteOnInvokePromise
實例或它的延續),其Result
將是你的任務之一。如果您將完成的任務傳遞到WhenAny
,則Result
會立即設置爲遇到的第一個完成的任務。
+0
當然,這裏也有一場比賽,假設未完成的任務很熱 - 如果你有'{t1,t2,ct1,ct2}''ct'項已經完成,'t'不在調用開始時,'t1'和't2'之一可以完成*同時* WhenAny'仍然循環並設置。簡而言之 - 如果你通過一系列不完整和完整的任務,你當然不能保證已經完成的任務之一將成爲你的回報。 –
相關問題
- 1. ScheduledThreadPoolExecutor:如何優先考慮任務?
- 2. 優先考慮Android中的任務
- 3. 任務並行庫(或PLINQ)是否考慮其他進程?
- 4. 如何優先考慮某些查詢?
- 5. Task.WhenAny - 任務被取消
- 6. 是否有任務隊列系統允許任務依賴於其他任務?
- 7. 芹菜任務優先級
- 8. 優先級任務列表
- 9. 調整JScrollPane以考慮Windows任務欄
- 10. 如何優先考慮MySQL中的某些查詢?
- 11. 列出哪些不被其他任務
- 12. sem_post沒有優先考慮在其他線程sem_wait調用
- 13. 優先考慮ASP.NET請求
- 14. 優先考慮AJAX調用
- 15. 優先考慮CSS類?
- 16. jQuery:優先考慮事件
- 17. 如何知道是否從其他任務或shell中調用了rake任務?
- 18. 正則表達式適用於某些服務器而非其他服務器
- 19. 調用與其他任務
- 20. 如何獲得任務優先級
- 21. 如何添加任務優先功能
- 22. 任務工作項目優先級
- 23. 優先處理ThreadPoolExecutors中的Netty任務
- 24. Eclipse中的任務優先級
- 25. 任務/活動優先級/依賴性
- 26. 保持任務優先級(ASP.NET MVC)
- 27. 查找任務優先級rtos
- 28. Gradle:在自定義任務類中使用其他(非官方)任務?
- 29. pip:優先考慮私人pypi服務器
- 30. 優先考慮減速機作業服務器?
你爲什麼要把完成的任務發送到'Task.WhenAny'? – Jonesopolis
否。如果您要添加完成的任務,則會返回它在集合中遇到的第一個完成的任務(按自然順序迭代,沒有任何瘋狂)。我非常懷疑順序是在任何地方指定的,所以行爲*可能會改變,但不可能。如果沒有任務完成,那麼它將返回*運行完成的第一個任務。 [相關源代碼](http://referencesource.microsoft.com#mscorlib/system/threading/Tasks/TaskFactory.cs,db51a91904616672) –