Поделиться через


WorkflowInvoker.InvokeAsync Метод

Определение

Вызывает рабочий процесс в асинхронном режиме с помощью асинхронного шаблона проектирования на основе событий.

Перегрузки

InvokeAsync(TimeSpan, Object)

Вызывает рабочий процесс в асинхронном режиме с указанным интервалом времени ожидания и уникальным идентификатором.

InvokeAsync(IDictionary<String,Object>, TimeSpan)

Вызывает рабочий процесс в асинхронном режиме с указанным словарем IDictionary<TKey,TValue> входных параметров и указанным интервалом времени ожидания.

InvokeAsync(IDictionary<String,Object>, Object)

Вызывает рабочий процесс в асинхронном режиме с использованием указанного словаря IDictionary<TKey,TValue> входных параметров и уникального идентификатора.

InvokeAsync()

Вызывает рабочий процесс в асинхронном режиме.

InvokeAsync(Object)

Вызывает рабочий процесс в асинхронном режиме с использованием указанного уникального идентификатора.

InvokeAsync(IDictionary<String,Object>)

Вызывает рабочий процесс в асинхронном режиме с использованием указанного словаря IDictionary<TKey,TValue> входных параметров.

InvokeAsync(IDictionary<String,Object>, TimeSpan, Object)

Вызывает рабочий процесс в асинхронном режиме с указанным словарем IDictionary<TKey,TValue> входных параметров, указанным интервалом времени ожидания и уникальным идентификатором.

InvokeAsync(TimeSpan)

Вызывает рабочий процесс в асинхронном режиме с указанным интервалом времени ожидания.

Комментарии

Чтобы получить уведомление о завершении рабочего процесса, необходимо обработать событие InvokeCompleted. Чтобы задать интервал ожидания, в течение которого рабочий процесс должен завершиться, используйте одну из перегруженных версий метода InvokeAsync, принимающую аргумент TimeSpan.

Этот метод вызывает рабочий процесс в асинхронном режиме с помощью асинхронного шаблона проектирования на основе событий. Дополнительные сведения см. в разделе Обзор асинхронной модели на основе событий.

InvokeAsync(TimeSpan, Object)

Вызывает рабочий процесс в асинхронном режиме с указанным интервалом времени ожидания и уникальным идентификатором.

public:
 void InvokeAsync(TimeSpan timeout, System::Object ^ userState);
public void InvokeAsync (TimeSpan timeout, object userState);
member this.InvokeAsync : TimeSpan * obj -> unit
Public Sub InvokeAsync (timeout As TimeSpan, userState As Object)

Параметры

timeout
TimeSpan

Период времени, в течение которого рабочий процесс должен быть завершен, прежде чем он будет прерван и возникнет исключение TimeoutException.

userState
Object

Предоставляемый пользователем объект, который позволяет отличить данную асинхронную операцию вызова от других текущих асинхронных операций вызова.

Примеры

В следующем примере вызывается рабочий процесс, состоящий из действия LongRunningDiceRoll. Действие LongRunningDiceRoll имеет два выходных аргумента, представляющих результаты броска игральных костей. После завершения рабочего процесса они возвращаются в обработчик InvokeCompleted.

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

Комментарии

Параметр userState должен быть уникальным для всех выполняемых в настоящий момент операций InvokeAsync данного действия. Если userState не уникален, возникает исключение ArgumentException. Параметр userState используется для выявления рабочего процесса в состоянии InvokeCompleted и отмены этого рабочего процесса с помощью метода CancelAsync.

Чтобы получить уведомление о завершении рабочего процесса, необходимо обработать событие InvokeCompleted. Если рабочий процесс не завершается в течение указанного интервала времени ожидания, он прерывается и создается исключение TimeoutException.

Примечание

Исключение TimeoutException создается только в случае, если время ожидания истекло и рабочий процесс перешел в состояние бездействия во время выполнения. Рабочий процесс, не завершающийся в течение отведенного времени ожидания, завершается успешно, если не переходит в состояние простоя.

Этот метод вызывает рабочий процесс в асинхронном режиме с помощью асинхронного шаблона проектирования на основе событий. Дополнительные сведения см. в разделе Обзор асинхронной модели на основе событий.

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

InvokeAsync(IDictionary<String,Object>, TimeSpan)

Вызывает рабочий процесс в асинхронном режиме с указанным словарем IDictionary<TKey,TValue> входных параметров и указанным интервалом времени ожидания.

public:
 void InvokeAsync(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, TimeSpan timeout);
public void InvokeAsync (System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout);
member this.InvokeAsync : System.Collections.Generic.IDictionary<string, obj> * TimeSpan -> unit
Public Sub InvokeAsync (inputs As IDictionary(Of String, Object), timeout As TimeSpan)

Параметры

inputs
IDictionary<String,Object>

Словарь входных параметров рабочего процесса, различаемых по имени аргумента.

timeout
TimeSpan

Период времени, в течение которого рабочий процесс должен быть завершен, прежде чем он будет прерван и возникнет исключение TimeoutException.

Примеры

В следующем примере вызывается рабочий процесс, состоящий из действия LongRunningDiceRoll. Действие LongRunningDiceRoll имеет два выходных аргумента, представляющих результаты броска игральных костей. После завершения рабочего процесса они возвращаются в обработчик InvokeCompleted.

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

Комментарии

Чтобы получить уведомление о завершении рабочего процесса, необходимо обработать событие InvokeCompleted. Если рабочий процесс не завершается в течение указанного интервала времени ожидания, он прерывается и создается исключение TimeoutException.

Примечание

Исключение TimeoutException создается только в случае, если время ожидания истекло и рабочий процесс перешел в состояние бездействия во время выполнения. Рабочий процесс, не завершающийся в течение отведенного времени ожидания, завершается успешно, если не переходит в состояние простоя.

Этот метод вызывает рабочий процесс в асинхронном режиме с помощью асинхронного шаблона проектирования на основе событий. Дополнительные сведения см. в разделе Обзор асинхронной модели на основе событий.

Этот метод сохраняет в задаче все исключения, не относящиеся к использованию, которые может создавать синхронный аналог метода. Если исключение сохраняется в возвращаемой задаче, это исключение будет создано при ожидании задачи. Исключения использования, такие как ArgumentException, по-прежнему создаются синхронно. Хранимые исключения см. в разделе исключения, создаваемые Invoke(IDictionary<String,Object>, TimeSpan).

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

InvokeAsync(IDictionary<String,Object>, Object)

Вызывает рабочий процесс в асинхронном режиме с использованием указанного словаря IDictionary<TKey,TValue> входных параметров и уникального идентификатора.

public:
 void InvokeAsync(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, System::Object ^ userState);
public void InvokeAsync (System.Collections.Generic.IDictionary<string,object> inputs, object userState);
member this.InvokeAsync : System.Collections.Generic.IDictionary<string, obj> * obj -> unit
Public Sub InvokeAsync (inputs As IDictionary(Of String, Object), userState As Object)

Параметры

inputs
IDictionary<String,Object>

Словарь входных параметров рабочего процесса, различаемых по имени аргумента.

userState
Object

Предоставляемый пользователем объект, который позволяет отличить данную асинхронную операцию вызова от других текущих асинхронных операций вызова.

Примеры

В следующем примере вызывается рабочий процесс, состоящий из действия LongRunningDiceRoll. Действие LongRunningDiceRoll имеет два выходных аргумента, представляющих результаты броска игральных костей. После завершения рабочего процесса они возвращаются в обработчик InvokeCompleted.

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

Комментарии

Параметр userState должен быть уникальным для всех выполняемых в настоящий момент операций InvokeAsync данного действия. Если userState не уникален, возникает исключение ArgumentException. Параметр userState используется для выявления рабочего процесса в состоянии InvokeCompleted и отмены этого рабочего процесса с помощью метода CancelAsync.

Чтобы получить уведомление о завершении рабочего процесса, необходимо обработать событие InvokeCompleted. Чтобы задать интервал ожидания, в течение которого рабочий процесс должен завершиться, используйте одну из перегруженных версий метода InvokeAsync, принимающую аргумент TimeSpan.

Этот метод вызывает рабочий процесс в асинхронном режиме с помощью асинхронного шаблона проектирования на основе событий. Дополнительные сведения см. в разделе Обзор асинхронной модели на основе событий.

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

InvokeAsync()

Вызывает рабочий процесс в асинхронном режиме.

public:
 void InvokeAsync();
public void InvokeAsync ();
member this.InvokeAsync : unit -> unit
Public Sub InvokeAsync ()

Примеры

В следующем примере вызывается рабочий процесс, состоящий из действия LongRunningDiceRoll. Действие LongRunningDiceRoll имеет два выходных аргумента, представляющих результаты броска игральных костей. После завершения рабочего процесса они возвращаются в обработчик InvokeCompleted.

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

Комментарии

Чтобы получить уведомление о завершении рабочего процесса, необходимо обработать событие InvokeCompleted. Чтобы задать интервал ожидания, в течение которого рабочий процесс должен завершиться, используйте одну из перегруженных версий метода InvokeAsync, принимающую аргумент TimeSpan.

Этот метод вызывает рабочий процесс в асинхронном режиме с помощью асинхронного шаблона проектирования на основе событий. Дополнительные сведения см. в разделе Обзор асинхронной модели на основе событий.

Этот метод сохраняет в задаче все исключения, не относящиеся к использованию, которые может создавать синхронный аналог метода. Если исключение сохраняется в возвращаемой задаче, это исключение будет создано при ожидании задачи. Исключения использования, такие как ArgumentException, по-прежнему создаются синхронно. Хранимые исключения см. в разделе исключения, создаваемые Invoke().

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

InvokeAsync(Object)

Вызывает рабочий процесс в асинхронном режиме с использованием указанного уникального идентификатора.

public:
 void InvokeAsync(System::Object ^ userState);
public void InvokeAsync (object userState);
member this.InvokeAsync : obj -> unit
Public Sub InvokeAsync (userState As Object)

Параметры

userState
Object

Предоставляемый пользователем объект, который позволяет отличить данную асинхронную операцию вызова от других текущих асинхронных операций вызова.

Примеры

В следующем примере вызывается рабочий процесс, состоящий из действия LongRunningDiceRoll. Действие LongRunningDiceRoll имеет два выходных аргумента, представляющих результаты броска игральных костей. После завершения рабочего процесса они возвращаются в обработчик InvokeCompleted.

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

Комментарии

Параметр userState должен быть уникальным для всех выполняемых в настоящий момент операций InvokeAsync данного действия. Если параметр userState не уникален, возникает исключение ArgumentException. Параметр userState используется для выявления рабочего процесса в состоянии InvokeCompleted и отмены этого рабочего процесса с помощью метода CancelAsync.

Чтобы получить уведомление о завершении рабочего процесса, необходимо обработать событие InvokeCompleted. Чтобы задать интервал ожидания, в течение которого рабочий процесс должен завершиться, используйте одну из перегруженных версий метода InvokeAsync, принимающую аргумент TimeSpan.

Этот метод вызывает рабочий процесс в асинхронном режиме с помощью асинхронного шаблона проектирования на основе событий. Дополнительные сведения см. в разделе Обзор асинхронной модели на основе событий.

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

InvokeAsync(IDictionary<String,Object>)

Вызывает рабочий процесс в асинхронном режиме с использованием указанного словаря IDictionary<TKey,TValue> входных параметров.

public:
 void InvokeAsync(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs);
public void InvokeAsync (System.Collections.Generic.IDictionary<string,object> inputs);
member this.InvokeAsync : System.Collections.Generic.IDictionary<string, obj> -> unit
Public Sub InvokeAsync (inputs As IDictionary(Of String, Object))

Параметры

inputs
IDictionary<String,Object>

Словарь входных параметров рабочего процесса, различаемых по имени аргумента.

Примеры

В следующем примере вызывается рабочий процесс, состоящий из действия LongRunningDiceRoll. Действие LongRunningDiceRoll имеет два выходных аргумента, представляющих результаты броска игральных костей. После завершения рабочего процесса они возвращаются в обработчик InvokeCompleted.

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

Комментарии

Чтобы получить уведомление о завершении рабочего процесса, необходимо обработать событие InvokeCompleted. Чтобы задать интервал ожидания, в течение которого рабочий процесс должен завершиться, используйте одну из перегруженных версий метода InvokeAsync, принимающую аргумент TimeSpan.

Этот метод вызывает рабочий процесс в асинхронном режиме с помощью асинхронного шаблона проектирования на основе событий. Дополнительные сведения см. в разделе Обзор асинхронной модели на основе событий.

Этот метод сохраняет в задаче все исключения, не относящиеся к использованию, которые может создавать синхронный аналог метода. Если исключение сохраняется в возвращаемой задаче, это исключение будет создано при ожидании задачи. Исключения использования, такие как ArgumentException, по-прежнему создаются синхронно. Хранимые исключения см. в разделе исключения, создаваемые Invoke(IDictionary<String,Object>).

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

InvokeAsync(IDictionary<String,Object>, TimeSpan, Object)

Вызывает рабочий процесс в асинхронном режиме с указанным словарем IDictionary<TKey,TValue> входных параметров, указанным интервалом времени ожидания и уникальным идентификатором.

public:
 void InvokeAsync(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, TimeSpan timeout, System::Object ^ userState);
public void InvokeAsync (System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout, object userState);
member this.InvokeAsync : System.Collections.Generic.IDictionary<string, obj> * TimeSpan * obj -> unit
Public Sub InvokeAsync (inputs As IDictionary(Of String, Object), timeout As TimeSpan, userState As Object)

Параметры

inputs
IDictionary<String,Object>

Словарь входных параметров рабочего процесса, различаемых по имени аргумента.

timeout
TimeSpan

Период времени, в течение которого рабочий процесс должен быть завершен, прежде чем он будет прерван и возникнет исключение TimeoutException.

userState
Object

Предоставляемый пользователем объект, который позволяет отличить данную асинхронную операцию вызова от других текущих асинхронных операций вызова.

Примеры

В следующем примере вызывается рабочий процесс, состоящий из действия LongRunningDiceRoll. Действие LongRunningDiceRoll имеет два выходных аргумента, представляющих результаты броска игральных костей. После завершения рабочего процесса они возвращаются в обработчик InvokeCompleted.

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

Комментарии

Параметр userState должен быть уникальным для всех выполняемых в настоящий момент операций InvokeAsync данного действия. Если userState не уникален, возникает исключение ArgumentException. Параметр userState используется для выявления рабочего процесса в состоянии InvokeCompleted и отмены этого рабочего процесса с помощью метода CancelAsync.

Чтобы получить уведомление о завершении рабочего процесса, необходимо обработать событие InvokeCompleted. Если рабочий процесс не завершается в течение указанного интервала времени ожидания, он прерывается и создается исключение TimeoutException.

Примечание

Исключение TimeoutException создается только в случае, если время ожидания истекло и рабочий процесс перешел в состояние бездействия во время выполнения. Рабочий процесс, не завершающийся в течение отведенного времени ожидания, завершается успешно, если не переходит в состояние простоя.

Этот метод вызывает рабочий процесс в асинхронном режиме с помощью асинхронного шаблона проектирования на основе событий. Дополнительные сведения см. в разделе Обзор асинхронной модели на основе событий.

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

InvokeAsync(TimeSpan)

Вызывает рабочий процесс в асинхронном режиме с указанным интервалом времени ожидания.

public:
 void InvokeAsync(TimeSpan timeout);
public void InvokeAsync (TimeSpan timeout);
member this.InvokeAsync : TimeSpan -> unit
Public Sub InvokeAsync (timeout As TimeSpan)

Параметры

timeout
TimeSpan

Период времени, в течение которого рабочий процесс должен быть завершен, прежде чем он будет прерван и возникнет исключение TimeoutException.

Примеры

В следующем примере вызывается рабочий процесс, состоящий из действия LongRunningDiceRoll. Действие LongRunningDiceRoll имеет два выходных аргумента, представляющих результаты броска игральных костей. После завершения рабочего процесса они возвращаются в обработчик InvokeCompleted.

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

Комментарии

Чтобы получить уведомление о завершении рабочего процесса, необходимо обработать событие InvokeCompleted. Если рабочий процесс не завершается в течение указанного интервала времени ожидания, он прерывается и создается исключение TimeoutException.

Примечание

Исключение TimeoutException создается только в случае, если время ожидания истекло и рабочий процесс перешел в состояние бездействия во время выполнения. Рабочий процесс, не завершающийся в течение отведенного времени ожидания, завершается успешно, если не переходит в состояние простоя.

Этот метод вызывает рабочий процесс в асинхронном режиме с помощью асинхронного шаблона проектирования на основе событий. Дополнительные сведения см. в разделе Обзор асинхронной модели на основе событий.

Этот метод сохраняет в задаче все исключения, не относящиеся к использованию, которые может создавать синхронный аналог метода. Если исключение сохраняется в возвращаемой задаче, это исключение будет создано при ожидании задачи. Исключения использования, такие как ArgumentException, по-прежнему создаются синхронно. Хранимые исключения см. в разделе исключения, создаваемые Invoke(TimeSpan).

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