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)
    {
        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 создается.

Note

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)
    {
        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 создается.

Note

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)
    {
        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)
    {
        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)
    {
        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)
    {
        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)
    {
        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 создается.

Note

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)
    {
        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 создается.

Note

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

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

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

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