Managing Workflow’s Lifecycle

Note - we published an MSDN article that contains the information below and a lot of other related information. See https://blogs.msdn.com/moustafa/archive/2006/09/08/747265.aspx for more details.

 

------------------------------------- 

 

Windows Workflow Foundation provides out of box (OOB) Activities and operations methods on Workflow Instance to manage the workflow statuses and lifecycle.

 

This document will describe the various workflow instance specific runtime events and the transitions between those events and their relationship to the workflow statuses.

 

The information is this document is provided 'AS IS' with no warranties, and confer no rights.

Persistence Points

If a WorkflowPersistenceService is present (i.e. added to the WorkflowRuntime instance) the workflow instance state is persisted to a storage medium at the following points:

  • On the completion of activities which are marked with PersistOnClose (E.g. transaction scope activities)
  • Prior to workflow instance completion
  • Prior to workflow instance termination
  • When the workflow goes idle
  • When WorkflowInstance.Unload or WorkflowInstance.TryUnload are called

 

Windows Workflow Foundation will call appropriate methods on the persistence service to save the workflow instance state and to retrieve the persisted state when needed. The workflow runtime handles all semantics regarding when to perform persistence and the persistence services are responsible for the actual saving and loading of the workflow instance. Activity states and workflow instance ID are serialized and saved to the persistence store. In addition, all other necessary information to resume workflow instance execution (e.g. queues) is included in the serialized, saved state.

Workflow Instance Events

From an end user’s perspective, a workflow instance could be Created, Running, Suspended Completed or Terminated. Internally, Windows Workflow Foundation’s runtime engine has various workflow states throughout the lifetime of the workflow instance. Those states are communicated to the host via Runtime Events and Tracking Workflow Events.

 

The Windows Workflow Foundation provides operations methods on WorkflowInstance to allow applications to manage the workflow lifecycle. In addition, there are policies that the applications can set (e.g. Unload Policies) and OOB Activities that can affect the workflow instance states. The following is a description of various workflow instance-specific events that are raised by workflow runtime to communicate the internal state of the workflow instance:

WorkflowAborted

A workflow instance is considered Aborted when the WorkflowRuntime engine throws away the in-memory instance. This is done by calling WorkflowInstance.Abort. Aborted workflow instances can be resumed from their last persistence point by calling WorkflowInstance.Resume. Aborting workflows is only valid when there is a persistence service. Aborting workflows is used in extreme situations where applications decide to discard all the work that is done from the last persistence point till abort is called.

WorkflowCompleted

A workflow instance is completed when the instances finished executing. At this time, the application can look at the queues that were not consumed by the workflow instance.

WorkflowCreated

A workflow is created when the instance is completely constructed but before activities are processed. That is, before the workflow start executing. The workflow instance is created by calling WorkflowRuntime.CreateWorkflow().

WorkflowIdled

The workflow instance is idle when it is waiting on an external event (e.g. timer, message, etc) to continue execution. An application can set their Unload policy to unload the workflow instance from memory when it is idle in order to save system resources.

WorkflowLoaded

The workflow instance is loaded when the instance state is loaded into memory usually from a persistence store.

WorkflowPersisted

The workflow instance is persisted when the workflow instance state is saved to a persistence store.

WorkflowResumed

The workflow instance is resumed when WorkflowInstance.Resume is called on the instance in order to resume it from a suspended or an aborted state.

WorkflowStarted

The workflow instance started event is raised when the workflow instance starts executing workflow activities.

WorkflowSuspended

Suspending the workflow instance is done via a WorkflowInstance.Suspend call or when a Suspend activity executes will get the workflow in a suspended status.

WorkflowTerminated

Terminating the workflow instance is done via a WorkflowInstance.Terminate call, when a Terminate activity executed, or when an unhandled exception occurs in the running workflow instance

WorkflowUnloaded

The workflow instance is Unloaded when it is unloaded from memory to a persistence store.

Workflow Instance Events Transitions

The following diagram explains the transitions between various workflow events and workflow statuses

Notes:

If there is a persistence service:

  • Persistence points will occur as shown
  • If the workflow instance is not in-memory any valid operations on the instance (resume, abort, terminate, etc) will cause the workflow instance to load first, and then continue fulfilling the request. E.g. if you have a suspended but unloaded workflow instance, calling resume on it will cause it to load first then getting in resumed as indicated in the diagram
  • Depending on the Unload policy, the workflow instance might get unloaded after getting persisted

Workflow Instance Operations

As previously discussed, WF provides control operations on form of methods on WorkflowInstance to control the workflow instance life cycle. Those methods are:

 

WorkflowInstance.Start

Starts executing the created workflow instance

 

WorkflowInstance.Abort

Aborts the workflow instance

 

WorkflowInstance.Load

Loads an unloaded workflow instance from a persistence store into memory. The instance is then schedules for execution from the state it was in before it got unloaded

 

WorkflowInstance.Resume

Resumes (continue execution of) a suspended or aborted workflow instance

 

WorkflowInstance.Suspend

Suspends the execution of the workflow instance

 

WorkflowInstance.Terminate

Terminates the workflow instance

 

WorkflowInstance.Unload

Unloads the workflow instance from memory to the persistence store, this call will block until after the currently scheduled work is finished or end of a transaction scope

 

WorkflowInstance.TryUnload

Unloads the workflow instance from memory to the persistence store when the instance is suspended or idle

 

Please see the Windows Workflow Foundation help for more information on various control methods on WorkflowInstance