我想在使用CCR的項目中執行任務的超時。基本上,當我將一個項目發佈到端口或將任務排入DispatcherQueue時,我希望能夠中止該任務或其運行的線程,如果這需要比配置的時間更長的時間。我怎樣才能做到這一點?如何中止CCR線程任務?
回答
你能確認你在問什麼嗎?您是否在Dispatcher中運行長期任務?殺死線程會破壞CCR模型,因此您需要能夠向線程發出信號以完成其工作併產生收益。假設它是沒有完成足夠快的一個循環,你可能會選擇排隊定時器:
var resultTimeoutPort = new Port<DateTime>();
dispatcherQueue.EnqueueTimer(TimeSpan.FromSeconds(RESULT_TIMEOUT),
resultTimeoutPort);
,並確保阻塞線程必須resultTimeoutPort提供參考。在阻塞環中,其中一個退出條件可能是:
do
{
//foomungus amount of work
}while(resultTimeoutPort.Test()==null&&
someOtherCondition)
如果我吠叫錯誤的樹,請發佈更多信息。
除了我試圖避免對foomungus工作代碼進行更改之外,您正朝着正確的方向前進。此外,該代碼可能並不總是有循環,有時我只是希望它在時間t嘗試並完成,如果不能,就離開。我一直在做一些閱讀,看起來可能沒有辦法獲得我想要的確切行爲,因爲我會按照你所說的打破模型。 – SpaceghostAli 2009-07-20 13:57:14
您可以在CCR「Receive」處理程序(或通過代理調用您的方法的方法)的開頭註冊線程(Thread.CurrentThread)。然後,如果需要,您可以進行定期檢查並在必要時放棄,這與您手動創建線程的方式基本相同。問題是,如果你使用你自己的Microsoft.Ccr.Core.Dispatcher和固定數量的線程,我不認爲有一種方法可以在你中止它們(基於我的測試)時返回這些線程。因此,如果您的調度程序有5個線程,那麼無論已註冊哪些任務,發佈將不再工作,您只能中止5次。但是,如果使用CLR線程池構造DispatcherQueue,則任何您中止的CCR線程都會自動替換,您不會遇到此問題。從我所看到的情況來看,雖然推薦使用CCR調度程序,但我認爲使用CLR線程池是在這種情況下的方法。
- 1. 微軟的CCR vs任務並行庫
- 2. 阻止UI線程的任務繼續
- 3. JavaFX任務線程不終止
- 4. MVC 5 - IIS停止任務線程
- 5. OpenMP任務 - 阻止特定線程執行任務的方式?
- 6. 如何檢查任務線程是否被阻止
- 7. 如何停止控制檯暫停我的線程和任務?
- 8. 微軟CCR獲得任何牽引力?
- 9. 如何停止在線程池執行程序中運行的任務Android
- 10. Rake任務用於在獨立線程中運行服務器,然後在任務完成時終止線程?
- 11. 如何確保線程任務運行
- 12. 如何重置多線程任務? (JXcore)
- 13. 如何用C中止任務並行庫中的特定線程
- 14. AppDomain.Unload()如何中止線程?
- 15. 如何中止線程
- 16. 多線程任務
- 17. 線程和任務
- 18. 任務並行庫線程中止/中斷
- 19. 如何停止在C#中線程內安全運行的所有C#任務
- 20. 如何更改lpSolve中的重量限制?線性編程,最大化CCR DEA
- 21. Celery,Django ..製作任務/線程啓動子任務/線程?
- 22. 加入任何終止的線程
- 23. 在異步WCF服務中使用CCR
- 24. 多線程任務庫,Threading.Timer或線程?
- 25. 啓動線程線程與任務類
- 26. 從任何窗體或線程停止線程
- 27. 如何知道其他線程中的任務何時完成?
- 28. Android,防止服務/線程
- 29. 的Java多線程任務
- 30. 多線程遞歸任務
很酷。機器人問題。 – Will 2009-07-13 16:38:28