2011-10-21 59 views
2

的任務,可能花費太長時間來完成,我想一個機制檢查,如果一個線程是活着

  1. 啓動任務
  2. 返回到用戶界面(其網頁)
  3. 定期/隨機檢查任務完成
  4. 取消正在執行的任務的時候用戶希望這樣
  5. 任務完成時得到通知/失敗

什麼是可能的解決方案?

  1. 主題? 啓動一個線程,保存其ManagedThreadId,(你可以通過ID獲得一個線程)

  2. 編寫Windows 服務, 發送通過共享對象/文件/數據庫來服務請求? 以同樣的方式繼續與服務交互(對象/文件/數據庫等) 服務?

+1

您使用的是什麼版本的.NET?聽起來像.NET 4中的任務並行庫將是理想的... –

+0

@JonSkeet在ASP.NET網頁上的TPL?你確定? –

+0

@哈桑 - 啊,沒有看到那一點。不在Web服務器本身,但很可能在服務*支持*用戶界面。任務肯定還是相關的。 –

回答

1

在Windows服務中託管WCF服務,該服務將通過從可以使用MSMQ或數據庫維護的隊列中添加/讀取來執行後臺任務。

當您添加一個項目進行處理;你應該得到一個任務ID。您應該能夠根據任務ID在db中記錄任務的完成/失敗/取消狀態。

您可以在合同

int ProcessItem(ItemDetails details); // returns task id 
bool CancelTask(int taskID); // returns true if successfully cancelled; false otherwise 
TaskStatus GetTaskStatus(int taskID); // returns Cancelled, Waiting, Failed or Completed 
+0

看起來像一個很好的通用解決方案,可以與請求/響應消息系統配對,共享RequestId。 – hazimdikenli

相關問題