4.1.5 SuspendActivity
當工作流遇到錯誤而需要手工幹預時,我們可以使用Suspend活動來暫時挂起工作流. Suspend活動有一個字元串類型的Error屬性.
宿主可以訂閱工作流Runtime的WorkflowSuspended事件并通過其事件參數(WorkflowSuspendedEventArgs類型)的Error屬性來擷取錯誤資訊. WorkflowSuspended事件參數還提供了一個WorkflowInstance屬性.宿主可以使用WorkflowInstance類的Resume方法來使工作流恢複執行,也可以使用Terminate方法使工作流悲慘的提前結束.
4.1.6 TerminateActivity
和Suspend活動相似,Terminate活動也可以挂起工作流.不同的是,使用Terminate挂起的工作流是無法被宿主恢複執行的(從單詞含義來了解會更加容易:Suspend,暫停;Terminate,終止).如果工作流已經執行到不可能繼續(也不可能恢複)的地步,就讓我們用這個活動來結束它吧.
Terminate活動也有一個字元串類型的Error屬性.宿主可以訂閱Runtime的WorkflowTerminated事件.事件處理程式參數(WorkflowTerminatedEventArgs類型)的屬性Exception(WorkflowTerminatedException類型)則包含了錯誤資訊.
如果想要指定引發WorkflowTerminated事件的異常類型,應該使用Throw活動.Throw活動可以使工作流捕捉到異常并繼續執行,而Terminate活動則總是抛出異常并終止工作流.
4.1.7 ThrowActivity
Throw活動和C#中的Throw語句類似-它的作用是抛出一個異常.我們可以在Code活動的ExcuteCode事件中編寫代碼來抛出異常,那麼為什麼要使用Throw活動呢? 因為Throw活動不僅可以抛出異常,還可以在工作流模型中構造一個顯式的異常塊.
如果異常沒有被處理并且傳播到工作流之外,那麼WF Runtime将捕獲它,接着終止工作流并抛出WorkflowTerminated事件.Runtime會在WorkflowTerminated事件的參數中包含異常的資訊.Throw活動的Fault屬性可以引用要抛出的異常類型.我們可以綁定Fault屬性到工作流的域或其它活動的屬性.
我們還可以使用FaultType屬性來描述并限制待抛出異常的類型.如果FaultType沒有被設定,Throw活動可能抛出任何類型的異常.