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


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. Дополнительные сведения см. в статье Обзор асинхронного программирования.

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