/// <summary>
 /// Return all events of a specific event type. e.g. ActivityFailedEvent, ActivityTimedoutEvent
 /// </summary>
 /// <typeparam name="TEvent"></typeparam>
 /// <param name="workflowItem"></param>
 /// <param name="includeRescheduleTimerEvents"></param>
 /// <returns></returns>
 public static IEnumerable <TEvent> Events <TEvent>(this IWorkflowItem workflowItem, bool includeRescheduleTimerEvents = false) where TEvent : WorkflowItemEvent
 {
     Ensure.NotNull(workflowItem, "workflowItem");
     return(workflowItem.AllEvents(includeRescheduleTimerEvents).OfType <TEvent>());
 }
 /// <summary>
 /// Return all events of a specific event type. e.g. ActivityFailedEvent, ActivityTimedoutEvent
 /// </summary>
 /// <param name="workflowItem"></param>
 /// <param name="eventType"></param>
 /// <param name="includeRescheduleTimerEvents"></param>
 /// <returns></returns>
 public static IEnumerable <WorkflowItemEvent> Events(this IWorkflowItem workflowItem, Type eventType, bool includeRescheduleTimerEvents = false)
 {
     Ensure.NotNull(workflowItem, "workflowItem");
     return(workflowItem.AllEvents(includeRescheduleTimerEvents).Where(e => e.GetType() == eventType));
 }