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