UnhandledExceptionAction UnhandledExceptionAction UnhandledExceptionAction UnhandledExceptionAction Enum

Определение

Указывает действие, которое выполняется, когда исключение покидает корневой элемент рабочего процесса.Specifies the action that occurs when an exception escapes the root of a workflow.

public enum class UnhandledExceptionAction
public enum UnhandledExceptionAction
type UnhandledExceptionAction = 
Public Enum UnhandledExceptionAction
Наследование
UnhandledExceptionActionUnhandledExceptionActionUnhandledExceptionActionUnhandledExceptionAction

Поля

Abort Abort Abort Abort 0

Указывает, что экземпляр WorkflowApplication должен прервать рабочий процесс.Specifies that the WorkflowApplication should abort the workflow. В результате вызывается делегат, возвращаемый Aborted после прерывания процесса.This results in the calling the delegate returned by the Aborted bwhen the abort process is complete. Причиной прерывания служит необработанное исключение.The unhandled exception is used as the abort reason.

Cancel Cancel Cancel Cancel 1

Указывает, что экземпляр WorkflowApplication должен запланировать отмену корневого действия и возобновить выполнение.Specifies that the WorkflowApplication should schedule the cancellation of the root activity and resume execution. В результате вызывается делегат, возвращаемый свойством Completed после отмены процесса.This results in a call to the delegate returned by the Completed property when the cancellation process is complete.

Terminate Terminate Terminate Terminate 2

Указывает, что экземпляр WorkflowApplication должен запланировать завершение корневого действия и возобновить выполнение.Specifies that the WorkflowApplication should schedule termination of the root activity and resume execution. В результате вызывается делегат, назначаемый свойству Completed после завершения процесса.This results in a call to the delegate assigned to the Completedproperty when the termination process is complete. Причиной завершения служит необработанное исключение.The unhandled exception is used as the termination reason. Terminate — действие по умолчанию, если не задан обработчик в свойстве OnUnhandledException.Terminate is the default action if no OnUnhandledException handler is specified.

Примеры

В следующем примере кода вызывается рабочий процесс, в котором создается исключение.The following example invokes a workflow that throws an exception. Исключение не обрабатывается рабочим процессом, и вызывается обработчик OnUnhandledException.The exception is unhandled by the workflow and the OnUnhandledException handler is invoked. Чтобы получить сведения об исключении, проверяются аргументы WorkflowApplicationUnhandledExceptionEventArgs, и рабочий процесс завершается.The WorkflowApplicationUnhandledExceptionEventArgs are inspected to provide information about the exception, and the workflow is terminated.

Activity wf = new Sequence
{
    Activities =
     {
         new WriteLine
         {
             Text = "Starting the workflow."
         },
         new Throw
        {
            Exception = new InArgument<Exception>((env) => 
                new ApplicationException("Something unexpected happened."))
        },
        new WriteLine
         {
             Text = "Ending the workflow."
         }
     }
};

WorkflowApplication wfApp = new WorkflowApplication(wf);

wfApp.OnUnhandledException = delegate(WorkflowApplicationUnhandledExceptionEventArgs e)
{
    // Display the unhandled exception.
    Console.WriteLine("OnUnhandledException in Workflow {0}\n{1}",
        e.InstanceId, e.UnhandledException.Message);

    Console.WriteLine("ExceptionSource: {0} - {1}",
        e.ExceptionSource.DisplayName, e.ExceptionSourceInstanceId);

    // Instruct the runtime to terminate the workflow.
    return UnhandledExceptionAction.Terminate;
};

wfApp.Aborted = delegate(WorkflowApplicationAbortedEventArgs e)
{
    // Display the exception that caused the workflow
    // to abort.
    Console.WriteLine("Workflow {0} Aborted.", e.InstanceId);
    Console.WriteLine("Exception: {0}\n{1}",
        e.Reason.GetType().FullName,
        e.Reason.Message);
};

wfApp.Completed = delegate(WorkflowApplicationCompletedEventArgs e)
{
    if (e.CompletionState == ActivityInstanceState.Faulted)
    {
        Console.WriteLine("Workflow {0} Terminated.", e.InstanceId);
        Console.WriteLine("Exception: {0}\n{1}",
            e.TerminationException.GetType().FullName,
            e.TerminationException.Message);
    }
    else if (e.CompletionState == ActivityInstanceState.Canceled)
    {
        Console.WriteLine("Workflow {0} Canceled.", e.InstanceId);
    }
    else
    {
        Console.WriteLine("Workflow {0} Completed.", e.InstanceId);

        // Retrieve the outputs of the workflow.
        foreach (var kvp in e.Outputs)
        {
            Console.WriteLine("Name: {0} - Value {1}",
                kvp.Key, kvp.Value);
        }

        // Outputs can be directly accessed by argument name.
        // Console.WriteLine("The winner is {0}.", e.Outputs["Winner"]);
    }
};

wfApp.Run();

В следующем примере кода вызывается рабочий процесс, в котором создается исключение.The following example invokes a workflow that throws an exception. Исключение не обрабатывается рабочим процессом, и вызывается обработчик OnUnhandledException.The exception is unhandled by the workflow and the OnUnhandledException handler is invoked. Аргументы WorkflowApplicationUnhandledExceptionEventArgs проверяются, чтобы получить сведения об исключении, а рабочий процесс завершается.The WorkflowApplicationUnhandledExceptionEventArgs are inspected to provide information about the exception, and the workflow is aborted.

Activity wf = new Sequence
{
    Activities =
     {
         new WriteLine
         {
             Text = "Starting the workflow."
         },
         new Throw
        {
            Exception = new InArgument<Exception>((env) => 
                new ApplicationException("Something unexpected happened."))
        },
        new WriteLine
         {
             Text = "Ending the workflow."
         }
     }
};

WorkflowApplication wfApp = new WorkflowApplication(wf);

wfApp.OnUnhandledException = delegate(WorkflowApplicationUnhandledExceptionEventArgs e)
{
    // Display the unhandled exception.
    Console.WriteLine("OnUnhandledException in Workflow {0}\n{1}",
        e.InstanceId, e.UnhandledException.Message);

    Console.WriteLine("ExceptionSource: {0} - {1}",
        e.ExceptionSource.DisplayName, e.ExceptionSourceInstanceId);

    // Instruct the runtime to abort the workflow.
    return UnhandledExceptionAction.Abort;
};

wfApp.Aborted = delegate(WorkflowApplicationAbortedEventArgs e)
{
    // Display the exception that caused the workflow
    // to abort.
    Console.WriteLine("Workflow {0} Aborted.", e.InstanceId);
    Console.WriteLine("Exception: {0}\n{1}",
        e.Reason.GetType().FullName,
        e.Reason.Message);
};

wfApp.Completed = delegate(WorkflowApplicationCompletedEventArgs e)
{
    if (e.CompletionState == ActivityInstanceState.Faulted)
    {
        Console.WriteLine("Workflow {0} Terminated.", e.InstanceId);
        Console.WriteLine("Exception: {0}\n{1}",
            e.TerminationException.GetType().FullName,
            e.TerminationException.Message);
    }
    else if (e.CompletionState == ActivityInstanceState.Canceled)
    {
        Console.WriteLine("Workflow {0} Canceled.", e.InstanceId);
    }
    else
    {
        Console.WriteLine("Workflow {0} Completed.", e.InstanceId);

        // Outputs can be retrieved from the Outputs dictionary,
        // keyed by argument name.
        // Console.WriteLine("The winner is {0}.", e.Outputs["Winner"]);
    }
};

wfApp.Run();

В следующем примере кода вызывается рабочий процесс, в котором создается исключение.The following example invokes a workflow that throws an exception. Исключение не обрабатывается рабочим процессом, и вызывается обработчик OnUnhandledException.The exception is unhandled by the workflow and the OnUnhandledException handler is invoked. Аргументы WorkflowApplicationUnhandledExceptionEventArgs проверяются, чтобы получить сведения об исключении, а рабочий процесс отменяется.The WorkflowApplicationUnhandledExceptionEventArgs are inspected to provide information about the exception, and the workflow is cancelled.

Activity wf = new Sequence
{
    Activities =
     {
         new WriteLine
         {
             Text = "Starting the workflow."
         },
         new Throw
        {
            Exception = new InArgument<Exception>((env) => 
                new ApplicationException("Something unexpected happened."))
        },
        new WriteLine
         {
             Text = "Ending the workflow."
         }
     }
};

WorkflowApplication wfApp = new WorkflowApplication(wf);

wfApp.OnUnhandledException = delegate(WorkflowApplicationUnhandledExceptionEventArgs e)
{
    // Display the unhandled exception.
    Console.WriteLine("OnUnhandledException in Workflow {0}\n{1}",
        e.InstanceId, e.UnhandledException.Message);

    Console.WriteLine("ExceptionSource: {0} - {1}",
        e.ExceptionSource.DisplayName, e.ExceptionSourceInstanceId);

    // Instruct the runtime to cancel the workflow.
    return UnhandledExceptionAction.Cancel;
};

wfApp.Aborted = delegate(WorkflowApplicationAbortedEventArgs e)
{
    // Display the exception that caused the workflow
    // to abort.
    Console.WriteLine("Workflow {0} Aborted.", e.InstanceId);
    Console.WriteLine("Exception: {0}\n{1}",
        e.Reason.GetType().FullName,
        e.Reason.Message);
};

wfApp.Completed = delegate(WorkflowApplicationCompletedEventArgs e)
{
    if (e.CompletionState == ActivityInstanceState.Faulted)
    {
        Console.WriteLine("Workflow {0} Terminated.", e.InstanceId);
        Console.WriteLine("Exception: {0}\n{1}",
            e.TerminationException.GetType().FullName,
            e.TerminationException.Message);
    }
    else if (e.CompletionState == ActivityInstanceState.Canceled)
    {
        Console.WriteLine("Workflow {0} Canceled.", e.InstanceId);
    }
    else
    {
        Console.WriteLine("Workflow {0} Completed.", e.InstanceId);

        // Outputs can be retrieved from the Outputs dictionary,
        // keyed by argument name.
        // Console.WriteLine("The winner is {0}.", e.Outputs["Winner"]);
    }
};

wfApp.Run();

Комментарии

Функция OnUnhandledException вызывается, если исключение покидает корневой элемент рабочего процесса.The OnUnhandledException function is invoked if an exception escapes the root of the workflow. Объект WorkflowApplicationUnhandledExceptionEventArgs предоставляет доступ к исключению, а также к указателю на объект Activity, который сформировал это исключение.The WorkflowApplicationUnhandledExceptionEventArgs provides access to the exception as well as a pointer to the Activity that generated the exception. Параметр Terminate является действием по умолчанию, если не указан обработчик OnUnhandledException.Terminate is the default action if no OnUnhandledException handler is specified.

Применяется к