WorkflowInvoker.BeginInvoke Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Вызывает рабочий процесс в асинхронном режиме с помощью асинхронного шаблона проектирования IAsyncResult.
Перегрузки
BeginInvoke(AsyncCallback, Object) |
Вызывает рабочий процесс в асинхронном режиме с указанным AsyncCallback и предоставляемым пользователем состоянием. |
BeginInvoke(IDictionary<String,Object>, AsyncCallback, Object) |
Вызывает рабочий процесс в асинхронном режиме с указанным словарем IDictionary<TKey,TValue> входных параметров, объектом AsyncCallback и предоставляемым пользователем состоянием. |
BeginInvoke(TimeSpan, AsyncCallback, Object) |
Вызывает рабочий процесс в асинхронном режиме с использованием указанного интервала времени ожидания, объекта AsyncCallback и предоставляемого пользователем состояния. |
BeginInvoke(IDictionary<String,Object>, TimeSpan, AsyncCallback, Object) |
Вызывает рабочий процесс в асинхронном режиме с указанным словарем IDictionary<TKey,TValue> входных параметров, интервалом времени ожидания, объектом AsyncCallback и предоставляемым пользователем состоянием. |
Комментарии
Дополнительные сведения см. в статье Обзор асинхронного программирования.
BeginInvoke(AsyncCallback, Object)
Вызывает рабочий процесс в асинхронном режиме с указанным AsyncCallback и предоставляемым пользователем состоянием.
public:
IAsyncResult ^ BeginInvoke(AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginInvoke (AsyncCallback callback, object state);
member this.BeginInvoke : AsyncCallback * obj -> IAsyncResult
Public Function BeginInvoke (callback As AsyncCallback, state As Object) As IAsyncResult
Параметры
- callback
- AsyncCallback
Метод, вызываемый после завершения рабочего процесса.
- state
- Object
Относящийся к необязательному приложению объект, содержащий сведения об асинхронной операции.
Возвращаемое значение
Ссылка на асинхронную операцию вызова.
Примеры
В следующем примере вызывается рабочий процесс, состоящий из действия LongRunningDiceRoll
. Действие LongRunningDiceRoll
имеет два выходных аргумента, представляющих результаты броска игральных костей. Они возвращаются путем вызова EndInvoke. После завершения вызова EndInvoke в словаре выходных данных возвращается каждый выходной аргумент с указанием имени.
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))
}
}
};
}
}
static void BeginInvokeExample()
{
WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());
string userState = "BeginInvoke example";
IAsyncResult result = invoker.BeginInvoke(new AsyncCallback(WorkflowCompletedCallback), userState);
// You can inspect result from the host to determine if the workflow
// is complete.
Console.WriteLine("result.IsCompleted: {0}", result.IsCompleted);
// The results of the workflow are retrieved by calling EndInvoke, which
// can be called from the callback or from the host. If called from the
// host, it blocks until the workflow completes. If a callback is not
// required, pass null for the callback parameter.
Console.WriteLine("Waiting for the workflow to complete.");
IDictionary<string, object> outputs = invoker.EndInvoke(result);
Console.WriteLine("The two dice are {0} and {1}.",
outputs["D1"], outputs["D2"]);
}
static void WorkflowCompletedCallback(IAsyncResult result)
{
Console.WriteLine("Workflow complete.");
}
Комментарии
Чтобы получить уведомление о завершении рабочего процесса и получить выходные параметры рабочего процесса, вызовите метод EndInvoke из метода callback
. Если вызвать метод EndInvoke до завершения рабочего процесса, он будет заблокирован до завершения рабочего процесса. Чтобы задать интервал ожидания, в течение которого рабочий процесс должен завершиться, используйте одну из перегруженных версий метода BeginInvoke, принимающую аргумент TimeSpan.
Этот метод вызывает рабочий процесс в асинхронном режиме с помощью асинхронного шаблона проектирования IAsyncResult. Дополнительные сведения см. в статье Обзор асинхронного программирования.
Применяется к
BeginInvoke(IDictionary<String,Object>, AsyncCallback, Object)
Вызывает рабочий процесс в асинхронном режиме с указанным словарем IDictionary<TKey,TValue> входных параметров, объектом AsyncCallback и предоставляемым пользователем состоянием.
public:
IAsyncResult ^ BeginInvoke(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginInvoke (System.Collections.Generic.IDictionary<string,object> inputs, AsyncCallback callback, object state);
member this.BeginInvoke : System.Collections.Generic.IDictionary<string, obj> * AsyncCallback * obj -> IAsyncResult
Public Function BeginInvoke (inputs As IDictionary(Of String, Object), callback As AsyncCallback, state As Object) As IAsyncResult
Параметры
- inputs
- IDictionary<String,Object>
Словарь входных параметров рабочего процесса, различаемых по имени аргумента.
- callback
- AsyncCallback
Метод, вызываемый после завершения рабочего процесса.
- state
- Object
Относящийся к необязательному приложению объект, содержащий сведения об асинхронной операции.
Возвращаемое значение
Ссылка на асинхронную операцию вызова.
Примеры
В следующем примере вызывается рабочий процесс, состоящий из действия LongRunningDiceRoll
. Действие LongRunningDiceRoll
имеет два выходных аргумента, представляющих результаты броска игральных костей. Они возвращаются путем вызова EndInvoke. После завершения вызова EndInvoke в словаре выходных данных возвращается каждый выходной аргумент с указанием имени.
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))
}
}
};
}
}
static void BeginInvokeExample()
{
WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());
string userState = "BeginInvoke example";
IAsyncResult result = invoker.BeginInvoke(new AsyncCallback(WorkflowCompletedCallback), userState);
// You can inspect result from the host to determine if the workflow
// is complete.
Console.WriteLine("result.IsCompleted: {0}", result.IsCompleted);
// The results of the workflow are retrieved by calling EndInvoke, which
// can be called from the callback or from the host. If called from the
// host, it blocks until the workflow completes. If a callback is not
// required, pass null for the callback parameter.
Console.WriteLine("Waiting for the workflow to complete.");
IDictionary<string, object> outputs = invoker.EndInvoke(result);
Console.WriteLine("The two dice are {0} and {1}.",
outputs["D1"], outputs["D2"]);
}
static void WorkflowCompletedCallback(IAsyncResult result)
{
Console.WriteLine("Workflow complete.");
}
Комментарии
Чтобы получить уведомление о завершении рабочего процесса и получить выходные параметры рабочего процесса, вызовите метод EndInvoke из метода callback
. Если вызвать метод EndInvoke до завершения рабочего процесса, он будет заблокирован до завершения рабочего процесса. Чтобы задать интервал ожидания, в течение которого рабочий процесс должен завершиться, используйте одну из перегруженных версий метода BeginInvoke, принимающую аргумент TimeSpan.
Этот метод вызывает рабочий процесс в асинхронном режиме с помощью асинхронного шаблона проектирования IAsyncResult. Дополнительные сведения см. в статье Обзор асинхронного программирования.
Применяется к
BeginInvoke(TimeSpan, AsyncCallback, Object)
Вызывает рабочий процесс в асинхронном режиме с использованием указанного интервала времени ожидания, объекта AsyncCallback и предоставляемого пользователем состояния.
public:
IAsyncResult ^ BeginInvoke(TimeSpan timeout, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginInvoke (TimeSpan timeout, AsyncCallback callback, object state);
member this.BeginInvoke : TimeSpan * AsyncCallback * obj -> IAsyncResult
Public Function BeginInvoke (timeout As TimeSpan, callback As AsyncCallback, state As Object) As IAsyncResult
Параметры
- timeout
- TimeSpan
Период времени, в течение которого рабочий процесс должен быть завершен, прежде чем он будет прерван и возникнет исключение TimeoutException.
- callback
- AsyncCallback
Метод, вызываемый после завершения рабочего процесса.
- state
- Object
Относящийся к необязательному приложению объект, содержащий сведения об асинхронной операции.
Возвращаемое значение
Ссылка на асинхронную операцию вызова.
Примеры
В следующем примере вызывается рабочий процесс, состоящий из действия LongRunningDiceRoll
. Действие LongRunningDiceRoll
имеет два выходных аргумента, представляющих результаты броска игральных костей. Они возвращаются путем вызова EndInvoke. После завершения вызова EndInvoke в словаре выходных данных возвращается каждый выходной аргумент с указанием имени.
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))
}
}
};
}
}
static void BeginInvokeExample()
{
WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());
string userState = "BeginInvoke example";
IAsyncResult result = invoker.BeginInvoke(new AsyncCallback(WorkflowCompletedCallback), userState);
// You can inspect result from the host to determine if the workflow
// is complete.
Console.WriteLine("result.IsCompleted: {0}", result.IsCompleted);
// The results of the workflow are retrieved by calling EndInvoke, which
// can be called from the callback or from the host. If called from the
// host, it blocks until the workflow completes. If a callback is not
// required, pass null for the callback parameter.
Console.WriteLine("Waiting for the workflow to complete.");
IDictionary<string, object> outputs = invoker.EndInvoke(result);
Console.WriteLine("The two dice are {0} and {1}.",
outputs["D1"], outputs["D2"]);
}
static void WorkflowCompletedCallback(IAsyncResult result)
{
Console.WriteLine("Workflow complete.");
}
Комментарии
Чтобы получить уведомление о завершении рабочего процесса и получить выходные параметры рабочего процесса, вызовите метод EndInvoke из метода callback
. Если вызвать метод EndInvoke до завершения рабочего процесса, он будет заблокирован до завершения рабочего процесса. Если рабочий процесс не завершается в течение указанного интервала времени ожидания, то он прерывается и при вызове метода TimeoutException создается исключение EndInvoke.
Примечание
Исключение TimeoutException создается только в случае, если время ожидания истекло и рабочий процесс перешел в состояние бездействия во время выполнения. Рабочий процесс, не завершающийся в течение отведенного времени ожидания, завершается успешно, если не переходит в состояние простоя.
Этот метод вызывает рабочий процесс в асинхронном режиме с помощью асинхронного шаблона проектирования IAsyncResult. Дополнительные сведения см. в статье Обзор асинхронного программирования.
Применяется к
BeginInvoke(IDictionary<String,Object>, TimeSpan, AsyncCallback, Object)
Вызывает рабочий процесс в асинхронном режиме с указанным словарем IDictionary<TKey,TValue> входных параметров, интервалом времени ожидания, объектом AsyncCallback и предоставляемым пользователем состоянием.
public:
IAsyncResult ^ BeginInvoke(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, TimeSpan timeout, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginInvoke (System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout, AsyncCallback callback, object state);
member this.BeginInvoke : System.Collections.Generic.IDictionary<string, obj> * TimeSpan * AsyncCallback * obj -> IAsyncResult
Public Function BeginInvoke (inputs As IDictionary(Of String, Object), timeout As TimeSpan, callback As AsyncCallback, state As Object) As IAsyncResult
Параметры
- inputs
- IDictionary<String,Object>
Словарь входных параметров рабочего процесса, различаемых по имени аргумента.
- timeout
- TimeSpan
Период времени, в течение которого рабочий процесс должен быть завершен, прежде чем он будет прерван и возникнет исключение TimeoutException.
- callback
- AsyncCallback
Метод, вызываемый после завершения рабочего процесса.
- state
- Object
Относящийся к необязательному приложению объект, содержащий сведения об асинхронной операции.
Возвращаемое значение
Ссылка на асинхронную операцию вызова.
Примеры
В следующем примере вызывается рабочий процесс, состоящий из действия LongRunningDiceRoll
. Действие LongRunningDiceRoll
имеет два выходных аргумента, представляющих результаты броска игральных костей. Они возвращаются путем вызова EndInvoke. После завершения вызова EndInvoke в словаре выходных данных возвращается каждый выходной аргумент с указанием имени.
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))
}
}
};
}
}
static void BeginInvokeExample()
{
WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());
string userState = "BeginInvoke example";
IAsyncResult result = invoker.BeginInvoke(new AsyncCallback(WorkflowCompletedCallback), userState);
// You can inspect result from the host to determine if the workflow
// is complete.
Console.WriteLine("result.IsCompleted: {0}", result.IsCompleted);
// The results of the workflow are retrieved by calling EndInvoke, which
// can be called from the callback or from the host. If called from the
// host, it blocks until the workflow completes. If a callback is not
// required, pass null for the callback parameter.
Console.WriteLine("Waiting for the workflow to complete.");
IDictionary<string, object> outputs = invoker.EndInvoke(result);
Console.WriteLine("The two dice are {0} and {1}.",
outputs["D1"], outputs["D2"]);
}
static void WorkflowCompletedCallback(IAsyncResult result)
{
Console.WriteLine("Workflow complete.");
}
Комментарии
Чтобы получить уведомление о завершении рабочего процесса и получить выходные параметры рабочего процесса, вызовите метод EndInvoke из метода callback
. Если вызвать метод EndInvoke до завершения рабочего процесса, он будет заблокирован до завершения рабочего процесса. Если рабочий процесс не завершается в течение указанного интервала времени ожидания, то он прерывается и при вызове TimeoutException создается исключение EndInvoke.
Примечание
Исключение TimeoutException создается только в случае, если время ожидания истекло и рабочий процесс перешел в состояние бездействия во время выполнения. Рабочий процесс, не завершающийся в течение отведенного времени ожидания, завершается успешно, если не переходит в состояние простоя.
Этот метод вызывает рабочий процесс в асинхронном режиме с помощью асинхронного шаблона проектирования IAsyncResult. Дополнительные сведения см. в статье Обзор асинхронного программирования.