Share via


WorkflowApplication.Terminate 메서드

정의

워크플로 인스턴스를 종료합니다.

오버로드

Terminate(Exception)

지정한 예외를 사용하여 워크플로 인스턴스를 종료합니다.

Terminate(String)

지정한 오류 메시지를 사용하여 워크플로 인스턴스를 종료합니다.

Terminate(Exception, TimeSpan)

지정한 예외 및 시간 제한 간격을 사용하여 워크플로 인스턴스를 종료합니다.

Terminate(String, TimeSpan)

지정한 오류 메시지 및 시간 제한 간격을 사용하여 워크플로 인스턴스를 종료합니다.

Terminate(Exception)

지정한 예외를 사용하여 워크플로 인스턴스를 종료합니다.

public:
 void Terminate(Exception ^ reason);
public void Terminate (Exception reason);
member this.Terminate : Exception -> unit
Public Sub Terminate (reason As Exception)

매개 변수

reason
Exception

워크플로 인스턴스의 종료 원인입니다.

예제

다음 예제에서는 WorkflowApplication을 사용하여 워크플로를 호스트합니다. WorkflowApplication 지정된 워크플로 정의를 사용하여 instance 생성되고, 원하는 워크플로 수명 주기 이벤트가 처리되고, 워크플로가 에 대한 호출Run로 호출됩니다. 워크플로가 시작된 Terminate 후 가 호출됩니다. 워크플로가 종료되면 콘솔에 다음 출력이 표시됩니다.

Starting the workflow.   
Workflow e6b33409-f010-49f1-82ce-56f8baabe5e5 Terminated.  
Exception: System.ApplicationException  
Terminating the workflow.   
Workflow e6b33409-f010-49f1-82ce-56f8baabe5e5 unloaded.  
Activity wf = new Sequence
{
    Activities =
     {
         new WriteLine
         {
             Text = "Starting the workflow."
         },
         new Delay
         {
             Duration = TimeSpan.FromSeconds(5)
         },
         new WriteLine
         {
             Text = "Ending the workflow."
         }
     }
};

// Create a WorkflowApplication instance.
WorkflowApplication wfApp = new WorkflowApplication(wf);

// Subscribe to any desired workflow lifecycle events.
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.Unloaded = delegate(WorkflowApplicationEventArgs e)
{
    Console.WriteLine("Workflow {0} unloaded.", e.InstanceId);
};

// Run the workflow.
wfApp.Run();

Thread.Sleep(TimeSpan.FromSeconds(1));

wfApp.Terminate(new ApplicationException("Terminating the workflow."));

설명

이 메서드는 워크플로 instance 종료를 예약합니다. 종료가 완료될 때 알림을 받도록 핸들을 Completed 사용합니다.

기본적으로 Terminate 작업은 30초 안에 완료되어야 합니다. 그렇지 않으면 TimeoutException 이 throw됩니다.

적용 대상

Terminate(String)

지정한 오류 메시지를 사용하여 워크플로 인스턴스를 종료합니다.

public:
 void Terminate(System::String ^ reason);
public void Terminate (string reason);
member this.Terminate : string -> unit
Public Sub Terminate (reason As String)

매개 변수

reason
String

워크플로 인스턴스의 종료 원인입니다.

예제

다음 예제에서는 WorkflowApplication을 사용하여 워크플로를 호스트합니다. WorkflowApplication 지정된 워크플로 정의를 사용하여 instance 생성되고, 원하는 워크플로 수명 주기 이벤트가 처리되고, 워크플로가 에 대한 호출Run로 호출됩니다. 워크플로가 시작된 Terminate 후 가 호출됩니다. 워크플로가 종료되면 콘솔에 다음 출력이 표시됩니다.

Starting the workflow.   
Workflow f87c6f91-4fe4-40b9-b7cb-4f1bd071bf84 Terminated.   
Exception: System.Activities.WorkflowApplicationTerminatedException  
Terminating the workflow.   
Workflow f87c6f91-4fe4-40b9-b7cb-4f1bd071bf84 unloaded.  
Activity wf = new Sequence
{
    Activities =
     {
         new WriteLine
         {
             Text = "Starting the workflow."
         },
         new Delay
         {
             Duration = TimeSpan.FromSeconds(5)
         },
         new WriteLine
         {
             Text = "Ending the workflow."
         }
     }
};

// Create a WorkflowApplication instance.
WorkflowApplication wfApp = new WorkflowApplication(wf);

// Subscribe to any desired workflow lifecycle events.
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.Unloaded = delegate(WorkflowApplicationEventArgs e)
{
    Console.WriteLine("Workflow {0} unloaded.", e.InstanceId);
};

// Run the workflow.
wfApp.Run();

Thread.Sleep(TimeSpan.FromSeconds(1));

wfApp.Terminate("Terminating the workflow.");

설명

이 메서드는 워크플로 instance 종료를 예약합니다. 종료가 완료될 때 알림을 받도록 핸들을 Completed 사용합니다.

기본적으로 Terminate 작업은 30초 안에 완료되어야 합니다. 그렇지 않으면 TimeoutException 이 throw됩니다.

적용 대상

Terminate(Exception, TimeSpan)

지정한 예외 및 시간 제한 간격을 사용하여 워크플로 인스턴스를 종료합니다.

public:
 void Terminate(Exception ^ reason, TimeSpan timeout);
public void Terminate (Exception reason, TimeSpan timeout);
member this.Terminate : Exception * TimeSpan -> unit
Public Sub Terminate (reason As Exception, timeout As TimeSpan)

매개 변수

reason
Exception

워크플로 인스턴스의 종료 원인입니다.

timeout
TimeSpan

작업이 취소되고 Terminate(Exception, TimeSpan)이 throw되기 전에 TimeoutException 작업을 완료해야 하는 간격입니다.

예제

다음 예제에서는 WorkflowApplication을 사용하여 워크플로를 호스트합니다. WorkflowApplication 지정된 워크플로 정의를 사용하여 instance 생성되고, 원하는 워크플로 수명 주기 이벤트가 처리되고, 워크플로가 에 대한 호출Run로 호출됩니다. 워크플로가 시작된 Terminate 후 가 호출됩니다. 워크플로가 종료되면 콘솔에 다음 출력이 표시됩니다.

Starting the workflow.   
Workflow de28efe5-9057-472b-8d95-899c249893c5 Terminated.  
Exception: System.ApplicationException  
Terminating the workflow.   
Workflow de28efe5-9057-472b-8d95-899c249893c5 unloaded.  
Activity wf = new Sequence
{
    Activities =
     {
         new WriteLine
         {
             Text = "Starting the workflow."
         },
         new Delay
         {
             Duration = TimeSpan.FromSeconds(5)
         },
         new WriteLine
         {
             Text = "Ending the workflow."
         }
     }
};

// Create a WorkflowApplication instance.
WorkflowApplication wfApp = new WorkflowApplication(wf);

// Subscribe to any desired workflow lifecycle events.
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.Unloaded = delegate(WorkflowApplicationEventArgs e)
{
    Console.WriteLine("Workflow {0} unloaded.", e.InstanceId);
};

// Run the workflow.
wfApp.Run();

Thread.Sleep(TimeSpan.FromSeconds(1));

wfApp.Terminate(new ApplicationException("Terminating the workflow."),
    TimeSpan.FromSeconds(15));

설명

이 메서드는 워크플로 종료를 예약합니다. 종료가 완료될 때 알림을 받도록 핸들을 Completed 사용합니다.

적용 대상

Terminate(String, TimeSpan)

지정한 오류 메시지 및 시간 제한 간격을 사용하여 워크플로 인스턴스를 종료합니다.

public:
 void Terminate(System::String ^ reason, TimeSpan timeout);
public void Terminate (string reason, TimeSpan timeout);
member this.Terminate : string * TimeSpan -> unit
Public Sub Terminate (reason As String, timeout As TimeSpan)

매개 변수

reason
String

워크플로 인스턴스의 종료 원인입니다.

timeout
TimeSpan

작업이 취소되고 Terminate(String, TimeSpan)이 throw되기 전에 TimeoutException 작업을 완료해야 하는 간격입니다.

예제

다음 예제에서는 WorkflowApplication을 사용하여 워크플로를 호스트합니다. WorkflowApplication 지정된 워크플로 정의를 사용하여 instance 생성되고, 원하는 워크플로 수명 주기 이벤트가 처리되고, 워크플로가 에 대한 호출Run로 호출됩니다. 워크플로가 시작된 Terminate 후 가 호출됩니다. 워크플로가 종료되면 콘솔에 다음 출력이 표시됩니다.

Starting the workflow.   
Workflow 2897d2ef-377e-4224-ae93-5c19b38f487c Terminated.   
Exception: System.Activities.WorkflowApplicationTerminatedException  
Terminating the workflow.   
Workflow 2897d2ef-377e-4224-ae93-5c19b38f487c unloaded.  
Activity wf = new Sequence
{
    Activities =
     {
         new WriteLine
         {
             Text = "Starting the workflow."
         },
         new Delay
         {
             Duration = TimeSpan.FromSeconds(5)
         },
         new WriteLine
         {
             Text = "Ending the workflow."
         }
     }
};

// Create a WorkflowApplication instance.
WorkflowApplication wfApp = new WorkflowApplication(wf);

// Subscribe to any desired workflow lifecycle events.
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.Unloaded = delegate(WorkflowApplicationEventArgs e)
{
    Console.WriteLine("Workflow {0} unloaded.", e.InstanceId);
};

// Run the workflow.
wfApp.Run();

Thread.Sleep(TimeSpan.FromSeconds(1));

wfApp.Terminate("Terminating the workflow.", TimeSpan.FromSeconds(15));

설명

이 메서드는 워크플로 instance 종료를 예약합니다. 종료가 완료될 때 알림을 받도록 핸들을 Completed 사용합니다.

적용 대상