我有一個使用任務並行庫實現的長時間運行的任務。當任務開始時,我抓取幾個輸入值和集合的快照,然後使用該信息執行各種操作。如果任何這些值或集合在任務運行時發生更改,我希望在完成後立即再次運行該任務。我應該創建一個新的任務還是有重用現有任務的方法?開始第二次迭代的最佳方式是什麼?如何重新啓動/重複使用重複性任務?
13
A
回答
11
創建一個新任務。
由於http://msdn.microsoft.com/en-us/library/dd270682.aspx指出,試圖重新啓動正在運行或已完成的任務不受支持。執行通常會引發異常的事情通常不是一個好主意,重新使用任務就是其中之一。
1
您不能再次啓動現有的Task
。所以你有兩種選擇:
- 開始一個新的
Task
。這可能更乾淨。 - 在
Task
中運行循環,檢查自上次以來是否發生了變化,如果有變化,則開始新的迭代。
+0
與上面相同的問題:您如何表示需要第二項任務? – SonOfPirate 2012-02-28 02:29:17
+0
很難說不知道你如何確定第二項任務是需要的。如果您想要在完成後重新啓動,則可以使用事件。 – svick 2012-02-28 02:37:27
0
您還可以重構程序邏輯以使用函數指針(或VB.NET中的委託)。
相關問題
- 1. Android重複性任務
- 2. 重新啓動恢復Android
- 3. Delajed Jobs中的重複性任務沒有啓動Rails?
- 4. 服務器重新啓動時模板重複列表項目
- 5. 如何重用Azure啓動任務?
- 6. 重新啓動一個任務活動
- 7. 如何在構建後自動執行重複性任務?
- 8. 「重複性任務」的設計選項
- 9. 在Azure上運行重複性任務
- 10. ASP中的重複性任務
- 11. 處理重複性任務的框架
- 12. 啓動服務如何重複使用警報管理器
- 13. 使用AlarmManager執行重複任務
- 14. 使用DistpatcherTimer重複BackgroundWorker任務
- 15. 使用tokio_timer重複Rust任務
- 16. 使用Redis添加重複任務
- 17. 重複使用SSIS中的任務
- 18. 使用IntentService執行重複任務
- 19. 如何加快重複Java任務
- 20. Webworks:如何運行重複任務
- 21. Android的重複任務
- 22. sencha touch重複任務
- 23. 咕嚕任務重複鍵
- 24. 重啓芹菜是否會導致重複任務?
- 25. 重新啓動服務器後重新啓動WCF服務
- 26. 在FreeRTOS中重新啓動任務
- 27. Kafka連接任務重新啓動`NoSuchMethodError:HttpServletRequest.isAsyncStarted`?
- 28. 取消並重新啓動任務
- 29. Mysql在重新啓動後恢復ONLY_FULL_GROUP_BY
- 30. Android - 視頻重新啓動或恢復
你會如何表示需要完成第二項任務?在原始任務運行之前可能會發生更改,直到完成後的某個時間。 – SonOfPirate 2012-02-28 02:28:45
基於這個標準,我認爲你會做一個單一的,不終止任務輪詢當前狀態,如果狀態改變,做你的事情。這裏的基本要求是,這是異步發生的,以避免阻塞主線程。您需要放置某種標誌來向Task表明應用程序正在關閉,並且應該終止。 – 2012-02-28 12:14:03
一個單一的,不終止的任務是我在想什麼。我可以使用CancellationToken來處理應用程序何時關閉,但我不確定我應該使用哪種機制來標記我需要任務來執行我的算法。如果我使用AutoResetEvent,那麼我將無法取消該任務的線程將被暫停等待事件。另一方面,我讀到使用SpinWait是非常密集的CPU。 – SonOfPirate 2012-02-28 12:54:54