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 вызове метода.

Note

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 вызове.

Note

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

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

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