當將多個完成的任務傳遞給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. 任務並行庫(或PLINQ)是否考慮其他進程?
- 2. Task.WhenAny - 任務被取消
- 3. 優先級任務列表
- 4. 芹菜任務優先級
- 5. 如何優先考慮MySQL中的某些查詢?
- 6. 列出哪些不被其他任務
- 7. jQuery:優先考慮事件
- 8. 優先考慮ASP.NET請求
- 9. 正則表達式適用於某些服務器而非其他服務器
- 10. 如何知道是否從其他任務或shell中調用了rake任務?
- 11. Eclipse中的任務優先級
- 12. 任務工作項目優先級
- 13. 如何添加任務優先功能
- 14. 如何獲得任務優先級
- 15. 任務/活動優先級/依賴性
- 16. 優先考慮減速機作業服務器?
- 17. pip:優先考慮私人pypi服務器
- 18. 傳遞非參考價值任務
- 19. 一些芹菜任務工作,其他人是NotRegistered
- 20. ASP.NET是否有任何規定來執行某些「永遠在線」的任務?
- 21. 在MVC中實現任務優先級的字典,枚舉或其他選擇?
- 22. 如何從Python芹菜的其他任務觸發任務?
- 23. 如何從其他任務運行吞噬任務?
- 24. 線程池的任務依賴於其他任務
- 25. 完成其他任務後運行gulp任務
- 26. 在其他幾項任務完成後運行任務
- 27. 不知道如何建立任務 - 爲調用其他任務
- 28. WPF C# - 連續執行任務,並允許其他任務
- 29. Azure啓動任務,等待所有其他任務完成
- 30. 在排序地圖時優先考慮某些字符串的最佳方法
你爲什麼要把完成的任務發送到'Task.WhenAny'? – Jonesopolis
否。如果您要添加完成的任務,則會返回它在集合中遇到的第一個完成的任務(按自然順序迭代,沒有任何瘋狂)。我非常懷疑順序是在任何地方指定的,所以行爲*可能會改變,但不可能。如果沒有任務完成,那麼它將返回*運行完成的第一個任務。 [相關源代碼](http://referencesource.microsoft.com#mscorlib/system/threading/Tasks/TaskFactory.cs,db51a91904616672) –