我們正在處理和上傳Windows服務(.net 4.0)中的大文件。過程和上載步驟可能需要幾分鐘才能完成。管理員可以直接在數據庫中將作業標記爲已取消,但要在內存隊列中清除,則需要重新啓動服務。目標是放棄這項工作,並在隊列中選擇下一份工作,而不必重新啓動服務。這是我想做的事:將線程/任務的異常或消息傳遞給主線程
在主入口點,啓動兩個任務:
Task processTask = Task.Factory.StartNew(ProcessJob);
Task monitorTask = Task.Factory.StartNew(MonitorDB);
ProcessJob會打電話像ProcessFile,UploadFile多長時間運行的步驟。我們正在檢查步驟之間的工作狀態,但工作可能會停留在這些長時間運行的步驟之一。
如果monitorTask檢測到數據庫中的作業狀態更改,它應該將其傳遞給主線程(通過異常或消息),以便主線程可以退出,從處理隊列中刪除自身,並允許隊列中的下一個作業啓動。無等待不能異常,但不能等待,因爲需要並行運行這些任務。 目前我們並不關心ProcessJob中的某些同步步驟可能仍在繼續,它最終可能會完成。我們會在代碼中處理。
到目前爲止,在我的所有應用程序中,我都使用Task.ContinueWith來獲得成功和失敗,但是從來沒有必須傳回主線程。
謝謝@jborg。它有幫助。順便說一句,我也意識到,我可以使用WaitAny在這兩個任務上實現類似的結果,然後檢查哪一個完成/故障。我有這兩個在測試應用程序。 – user1408552