的任務,可能花費太長時間來完成,我想一個機制檢查,如果一個線程是活着
- 啓動任務
- 返回到用戶界面(其網頁)
- 定期/隨機檢查任務完成
- 取消正在執行的任務的時候用戶希望這樣
- 任務完成時得到通知/失敗
什麼是可能的解決方案?
主題? 啓動一個線程,保存其ManagedThreadId,(你可以通過ID獲得一個線程)
編寫Windows 服務, 發送通過共享對象/文件/數據庫來服務請求? 以同樣的方式繼續與服務交互(對象/文件/數據庫等) 服務?
的任務,可能花費太長時間來完成,我想一個機制檢查,如果一個線程是活着
什麼是可能的解決方案?
主題? 啓動一個線程,保存其ManagedThreadId,(你可以通過ID獲得一個線程)
編寫Windows 服務, 發送通過共享對象/文件/數據庫來服務請求? 以同樣的方式繼續與服務交互(對象/文件/數據庫等) 服務?
在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
看起來像一個很好的通用解決方案,可以與請求/響應消息系統配對,共享RequestId。 – hazimdikenli
您的WCF下面的方法可以做到這一點在單個進程 看一看任務Paralell庫和/或TPL數據流
http://msdn.microsoft.com/en-us/library/dd460717.aspx HTTP:/ /go.microsoft.com/fwlink/?LinkId=205053
您使用的是什麼版本的.NET?聽起來像.NET 4中的任務並行庫將是理想的... –
@JonSkeet在ASP.NET網頁上的TPL?你確定? –
@哈桑 - 啊,沒有看到那一點。不在Web服務器本身,但很可能在服務*支持*用戶界面。任務肯定還是相關的。 –