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).