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


WorkflowInvoker.Invoke Метод

Определение

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

Перегрузки

Invoke(Activity, IDictionary<String,Object>, TimeSpan)

Вызывает рабочий процесс в синхронном режиме с использованием определения рабочего процесса, словаря входных параметров IDictionary<TKey,TValue> и интервала ожидания.

Invoke(Activity, TimeSpan)

Вызывает рабочий процесс в синхронном режиме с использованием указанного определения рабочего процесса и интервала времени ожидания.

Invoke(Activity, IDictionary<String,Object>)

Вызывает рабочий процесс в синхронном режиме с использованием определения рабочего процесса и словаря входных параметров IDictionary<TKey,TValue>.

Invoke(IDictionary<String,Object>, TimeSpan)

Вызывает действие, переданное в конструктор WorkflowInvoker(Activity), в синхронном режиме с указанным словарем IDictionary<TKey,TValue> входных параметров и указанным интервалом времени ожидания.

Invoke(IDictionary<String,Object>)

Вызывает действие, переданное в конструктор WorkflowInvoker(Activity), в синхронном режиме с указанным словарем IDictionary<TKey,TValue> входных параметров.

Invoke(Activity)

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

Invoke()

Вызывает рабочий процесс синхронным образом, используя определение рабочего процесса, переданное в конструктор WorkflowInvoker(Activity).

Invoke(TimeSpan)

Вызывает рабочий процесс в синхронном режиме с указанным интервалом времени ожидания.

Invoke<TResult>(Activity<TResult>)

Вызывает рабочий процесс синхронным образом, используя определение рабочего процесса, переданное в конструктор WorkflowInvoker(Activity).

Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>)

Вызывает рабочий процесс в синхронном режиме с использованием определения рабочего процесса и словаря входных параметров IDictionary<TKey,TValue>.

Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, TimeSpan)

Вызывает рабочий процесс в синхронном режиме с использованием определения рабочего процесса, словаря входных параметров IDictionary<TKey,TValue> и интервала ожидания.

Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, IDictionary<String,Object>, TimeSpan)

Вызывает рабочий процесс в синхронном режиме с использованием указанного определения рабочего процесса, словаря IDictionary<TKey,TValue> входных параметров, словаря IDictionary<TKey,TValue> дополнительных выходных параметров и интервала времени ожидания.

Комментарии

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

Invoke(Activity, IDictionary<String,Object>, TimeSpan)

Вызывает рабочий процесс в синхронном режиме с использованием определения рабочего процесса, словаря входных параметров IDictionary<TKey,TValue> и интервала ожидания.

public:
 static System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(System::Activities::Activity ^ workflow, System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, TimeSpan timeout);
public static System.Collections.Generic.IDictionary<string,object> Invoke (System.Activities.Activity workflow, System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout);
static member Invoke : System.Activities.Activity * System.Collections.Generic.IDictionary<string, obj> * TimeSpan -> System.Collections.Generic.IDictionary<string, obj>
Public Shared Function Invoke (workflow As Activity, inputs As IDictionary(Of String, Object), timeout As TimeSpan) As IDictionary(Of String, Object)

Параметры

workflow
Activity

Определение вызываемого рабочего процесса.

inputs
IDictionary<String,Object>

Словарь входных параметров рабочего процесса, различаемых по имени аргумента.

timeout
TimeSpan

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

Возвращаемое значение

Словарь значений OutArgument и InOutArgument корневого действия. Ключом этих значений является имя аргумента, представляющего выходные значения рабочего процесса.

Примеры

В следующем примере вызывается рабочий процесс, содержащий два действия WriteLine и действие Delay, для которого задан срок Duration в одну минуту. Этот рабочий процесс вызывается дважды: сначала с интервалом ожидания в две минуты, а затем с интервалом ожидания в 30 секунд. Первый рабочий процесс завершается успешно, а второй не завершается, и вызывается исключение TimeoutException.

Activity wf = new Sequence()
{
    Activities =
    {
        new WriteLine()
        {
            Text = "Before the 1 minute delay."
        },
        new Delay()
        {
            Duration = TimeSpan.FromMinutes(1)
        },
        new WriteLine()
        {
            Text = "After the 1 minute delay."
        }
    }
};

// This workflow completes successfully.
WorkflowInvoker.Invoke(wf, TimeSpan.FromMinutes(2));

// This workflow does not complete and a TimeoutException
// is thrown.
try
{
    WorkflowInvoker.Invoke(wf, TimeSpan.FromSeconds(30));
}
catch (TimeoutException ex)
{
    Console.WriteLine(ex.Message);
}

Пример использования Invoke с входными и выходными аргументами см. в разделе перегрузка Invoke с теми же параметрами, что и эта перегрузка без интервала времени ожидания.

Комментарии

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

Примечание

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

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

Invoke(Activity, TimeSpan)

Вызывает рабочий процесс в синхронном режиме с использованием указанного определения рабочего процесса и интервала времени ожидания.

public:
 static System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(System::Activities::Activity ^ workflow, TimeSpan timeout);
public static System.Collections.Generic.IDictionary<string,object> Invoke (System.Activities.Activity workflow, TimeSpan timeout);
static member Invoke : System.Activities.Activity * TimeSpan -> System.Collections.Generic.IDictionary<string, obj>
Public Shared Function Invoke (workflow As Activity, timeout As TimeSpan) As IDictionary(Of String, Object)

Параметры

workflow
Activity

Определение вызываемого рабочего процесса.

timeout
TimeSpan

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

Возвращаемое значение

Словарь значений OutArgument и InOutArgument корневого действия. Ключом этих значений является имя аргумента, представляющего выходные значения рабочего процесса.

Примеры

В следующем примере вызывается рабочий процесс, содержащий два действия WriteLine и действие Delay, для которого задан срок Duration в одну минуту. Этот рабочий процесс вызывается дважды: сначала с интервалом ожидания в две минуты, а затем с интервалом ожидания в 30 секунд. Первый рабочий процесс завершается успешно, а второй не завершается, и вызывается исключение TimeoutException.

Activity wf = new Sequence()
{
    Activities =
    {
        new WriteLine()
        {
            Text = "Before the 1 minute delay."
        },
        new Delay()
        {
            Duration = TimeSpan.FromMinutes(1)
        },
        new WriteLine()
        {
            Text = "After the 1 minute delay."
        }
    }
};

// This workflow completes successfully.
WorkflowInvoker.Invoke(wf, TimeSpan.FromMinutes(2));

// This workflow does not complete and a TimeoutException
// is thrown.
try
{
    WorkflowInvoker.Invoke(wf, TimeSpan.FromSeconds(30));
}
catch (TimeoutException ex)
{
    Console.WriteLine(ex.Message);
}

Пример использования Invoke с выходными аргументами см. в разделе перегрузка Invoke с теми же параметрами, что и эта перегрузка без интервала времени ожидания.

Комментарии

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

Примечание

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

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

Invoke(Activity, IDictionary<String,Object>)

Вызывает рабочий процесс в синхронном режиме с использованием определения рабочего процесса и словаря входных параметров IDictionary<TKey,TValue>.

public:
 static System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(System::Activities::Activity ^ workflow, System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs);
public static System.Collections.Generic.IDictionary<string,object> Invoke (System.Activities.Activity workflow, System.Collections.Generic.IDictionary<string,object> inputs);
static member Invoke : System.Activities.Activity * System.Collections.Generic.IDictionary<string, obj> -> System.Collections.Generic.IDictionary<string, obj>
Public Shared Function Invoke (workflow As Activity, inputs As IDictionary(Of String, Object)) As IDictionary(Of String, Object)

Параметры

workflow
Activity

Определение вызываемого рабочего процесса.

inputs
IDictionary<String,Object>

Словарь входных параметров рабочего процесса, различаемых по имени аргумента.

Возвращаемое значение

Словарь значений OutArgument и InOutArgument корневого действия. Ключом этих значений является имя аргумента, представляющего выходные значения рабочего процесса.

Примеры

В следующем примере вызывается рабочий процесс, состоящий из одного действия Divide, которое имеет два входных аргумента и два выходных аргумента. При вызове рабочего процесса передается словарь arguments, содержащий значения каждого входного аргумента с указанием имени аргумента. После завершения вызова Invoke в словаре выходных данных outputs возвращается каждый выходной аргумент с указанием имени.

public sealed class Divide : CodeActivity
{
    [RequiredArgument]
    public InArgument<int> Dividend { get; set; }

    [RequiredArgument]
    public InArgument<int> Divisor { get; set; }

    public OutArgument<int> Remainder { get; set; }
    public OutArgument<int> Result { get; set; }

    protected override void Execute(CodeActivityContext context)
    {
        int quotient = Dividend.Get(context) / Divisor.Get(context);
        int remainder = Dividend.Get(context) % Divisor.Get(context);

        Result.Set(context, quotient);
        Remainder.Set(context, remainder);
    }
}
int dividend = 500;
int divisor = 36;

Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("Dividend", dividend);
arguments.Add("Divisor", divisor);

IDictionary<string, object> outputs =
    WorkflowInvoker.Invoke(new Divide(), arguments);

Console.WriteLine("{0} / {1} = {2} Remainder {3}",
    dividend, divisor, outputs["Result"], outputs["Remainder"]);

Если рабочий процесс является производным от ActivityWithResult, например CodeActivity<TResult> или Activity<TResult>, и есть выходные аргументы в дополнение к четко определенному Result выходному аргументу, то для получения дополнительных аргументов необходимо использовать неуниверсийную перегрузку Invoke, например, эту. Для этого определение рабочего процесса, переданное в Invoke, должно быть типа Activity. В этом примере Divide действие является производным от CodeActivity<int>, но объявляется как Activity , поэтому используется эта перегрузка Invoke, которая возвращает словарь аргументов вместо одного возвращаемого значения.

public sealed class Divide : CodeActivity<int>
{
    public InArgument<int> Dividend { get; set; }
    public InArgument<int> Divisor { get; set; }
    public OutArgument<int> Remainder { get; set; }

    protected override int Execute(CodeActivityContext context)
    {
        int quotient = Dividend.Get(context) / Divisor.Get(context);
        int remainder = Dividend.Get(context) % Divisor.Get(context);

        Remainder.Set(context, remainder);

        return quotient;
    }
}
int dividend = 500;
int divisor = 36;

Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("Dividend", dividend);
arguments.Add("Divisor", divisor);

Activity wf = new Divide();

IDictionary<string, object> outputs =
    WorkflowInvoker.Invoke(wf, arguments);

Console.WriteLine("{0} / {1} = {2} Remainder {3}",
    dividend, divisor, outputs["Result"], outputs["Remainder"]);

Комментарии

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

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

Invoke(IDictionary<String,Object>, TimeSpan)

Вызывает действие, переданное в конструктор WorkflowInvoker(Activity), в синхронном режиме с указанным словарем IDictionary<TKey,TValue> входных параметров и указанным интервалом времени ожидания.

public:
 System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, TimeSpan timeout);
public System.Collections.Generic.IDictionary<string,object> Invoke (System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout);
member this.Invoke : System.Collections.Generic.IDictionary<string, obj> * TimeSpan -> System.Collections.Generic.IDictionary<string, obj>
Public Function Invoke (inputs As IDictionary(Of String, Object), timeout As TimeSpan) As IDictionary(Of String, Object)

Параметры

inputs
IDictionary<String,Object>

Словарь входных параметров рабочего процесса, различаемых по имени аргумента.

timeout
TimeSpan

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

Возвращаемое значение

Словарь значений OutArgument и InOutArgument корневого действия. Ключом этих значений является имя аргумента, представляющего выходные значения рабочего процесса.

Примеры

В следующем примере вызывается рабочий процесс, содержащий два действия WriteLine и действие Delay, для которого задан срок Duration в одну минуту. Этот рабочий процесс вызывается дважды: сначала с интервалом ожидания в две минуты, а затем с интервалом ожидания в 30 секунд. Первый рабочий процесс вызывается успешно, а второй не завершается, вызывается исключение TimeoutException, и выводится следующее сообщение.

The operation did not complete within the allotted timeout of 00:00:30.   
The time allotted to this operation may have been a portion of a longer timeout.  
Activity wf = new Sequence()
{
    Activities =
    {
        new WriteLine()
        {
            Text = "Before the 1 minute delay."
        },
        new Delay()
        {
            Duration = TimeSpan.FromMinutes(1)
        },
        new WriteLine()
        {
            Text = "After the 1 minute delay."
        }
    }
};

WorkflowInvoker invoker = new WorkflowInvoker(wf);

// This workflow completes successfully.
invoker.Invoke(TimeSpan.FromMinutes(2));

// This workflow does not complete and a TimeoutException
// is thrown.
try
{
    invoker.Invoke(TimeSpan.FromSeconds(30));
}
catch (TimeoutException ex)
{
    Console.WriteLine(ex.Message);
}

Пример использования Invoke с входными и выходными аргументами см. в разделе перегрузка Invoke с теми же параметрами, что и эта перегрузка без интервала времени ожидания.

Комментарии

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

Примечание

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

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

Invoke(IDictionary<String,Object>)

Вызывает действие, переданное в конструктор WorkflowInvoker(Activity), в синхронном режиме с указанным словарем IDictionary<TKey,TValue> входных параметров.

public:
 System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs);
public System.Collections.Generic.IDictionary<string,object> Invoke (System.Collections.Generic.IDictionary<string,object> inputs);
member this.Invoke : System.Collections.Generic.IDictionary<string, obj> -> System.Collections.Generic.IDictionary<string, obj>
Public Function Invoke (inputs As IDictionary(Of String, Object)) As IDictionary(Of String, Object)

Параметры

inputs
IDictionary<String,Object>

Словарь входных параметров рабочего процесса, различаемых по имени аргумента.

Возвращаемое значение

Словарь значений OutArgument и InOutArgument корневого действия. Ключом этих значений является имя аргумента, представляющего выходные значения рабочего процесса.

Примеры

В следующем примере вызывается рабочий процесс, состоящий из одного действия Divide, которое имеет два входных аргумента и два выходных аргумента. При вызове рабочего процесса передается словарь arguments, содержащий значения каждого входного аргумента с указанием имени аргумента. После завершения вызова Invoke в словаре выходных данных outputs возвращается каждый выходной аргумент с указанием имени.

public sealed class Divide : CodeActivity
{
    [RequiredArgument]
    public InArgument<int> Dividend { get; set; }

    [RequiredArgument]
    public InArgument<int> Divisor { get; set; }

    public OutArgument<int> Remainder { get; set; }
    public OutArgument<int> Result { get; set; }

    protected override void Execute(CodeActivityContext context)
    {
        int quotient = Dividend.Get(context) / Divisor.Get(context);
        int remainder = Dividend.Get(context) % Divisor.Get(context);

        Result.Set(context, quotient);
        Remainder.Set(context, remainder);
    }
}
int dividend = 500;
int divisor = 36;

Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("Dividend", dividend);
arguments.Add("Divisor", divisor);

WorkflowInvoker invoker = new WorkflowInvoker(new Divide());

IDictionary<string, object> outputs = invoker.Invoke(arguments);

Console.WriteLine("{0} / {1} = {2} Remainder {3}",
    dividend, divisor, outputs["Result"], outputs["Remainder"]);

Если рабочий процесс является производным от ActivityWithResult, например CodeActivity<TResult> или Activity<TResult>, и есть выходные аргументы в дополнение к четко определенному Result выходному аргументу, то для получения дополнительных аргументов необходимо использовать неуниверсийную перегрузку Invoke, например, эту. Для этого определение рабочего процесса, передаваемого WorkflowInvoker в конструктор, должно иметь тип Activity. В этом примере Divide действие является производным от CodeActivity<int>, но объявляется как Activity , поэтому используется эта перегрузка Invoke, которая возвращает словарь аргументов вместо одного возвращаемого значения.

public sealed class Divide : CodeActivity<int>
{
    public InArgument<int> Dividend { get; set; }
    public InArgument<int> Divisor { get; set; }
    public OutArgument<int> Remainder { get; set; }

    protected override int Execute(CodeActivityContext context)
    {
        int quotient = Dividend.Get(context) / Divisor.Get(context);
        int remainder = Dividend.Get(context) % Divisor.Get(context);

        Remainder.Set(context, remainder);

        return quotient;
    }
}
int dividend = 500;
int divisor = 36;

Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("Dividend", dividend);
arguments.Add("Divisor", divisor);

Activity wf = new Divide();

WorkflowInvoker invoker = new WorkflowInvoker(wf);

IDictionary<string, object> outputs = invoker.Invoke(arguments);

Console.WriteLine("{0} / {1} = {2} Remainder {3}",
    dividend, divisor, outputs["Result"], outputs["Remainder"]);

Комментарии

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

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

Invoke(Activity)

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

public:
 static System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(System::Activities::Activity ^ workflow);
public static System.Collections.Generic.IDictionary<string,object> Invoke (System.Activities.Activity workflow);
static member Invoke : System.Activities.Activity -> System.Collections.Generic.IDictionary<string, obj>
Public Shared Function Invoke (workflow As Activity) As IDictionary(Of String, Object)

Параметры

workflow
Activity

Определение вызываемого рабочего процесса.

Возвращаемое значение

Словарь значений OutArgument и InOutArgument корневого действия. Ключом этих значений является имя аргумента, представляющего выходные значения рабочего процесса.

Примеры

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

public sealed class DiceRoll : CodeActivity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    static Random r = new Random();

    protected override void Execute(CodeActivityContext context)
    {
        D1.Set(context, r.Next(1, 7));
        D2.Set(context, r.Next(1, 7));
    }
}
IDictionary<string, object> outputs =
    WorkflowInvoker.Invoke(new DiceRoll());

Console.WriteLine("The two dice are {0} and {1}.",
    outputs["D1"], outputs["D2"]);

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

Activity wf = new WriteLine
{
    Text = "Hello World."
};

WorkflowInvoker.Invoke(wf);

Комментарии

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

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

Invoke()

Вызывает рабочий процесс синхронным образом, используя определение рабочего процесса, переданное в конструктор WorkflowInvoker(Activity).

public:
 System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke();
public System.Collections.Generic.IDictionary<string,object> Invoke ();
member this.Invoke : unit -> System.Collections.Generic.IDictionary<string, obj>
Public Function Invoke () As IDictionary(Of String, Object)

Возвращаемое значение

Словарь значений OutArgument и InOutArgument корневого действия. Ключом этих значений является имя аргумента, представляющего выходные значения рабочего процесса.

Примеры

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

public sealed class DiceRoll : CodeActivity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    static Random r = new Random();

    protected override void Execute(CodeActivityContext context)
    {
        D1.Set(context, r.Next(1, 7));
        D2.Set(context, r.Next(1, 7));
    }
}
WorkflowInvoker invoker = new WorkflowInvoker(new DiceRoll());

IDictionary<string, object> outputs =
    invoker.Invoke();

Console.WriteLine("The two dice are {0} and {1}.",
    outputs["D1"], outputs["D2"]);

outputs = invoker.Invoke();

Console.WriteLine("The next two dice are {0} and {1}.",
    outputs["D1"], outputs["D2"]);

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

Activity wf = new WriteLine
{
    Text = "Hello World."
};

WorkflowInvoker invoker = new WorkflowInvoker(wf);

invoker.Invoke();

Комментарии

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

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

Invoke(TimeSpan)

Вызывает рабочий процесс в синхронном режиме с указанным интервалом времени ожидания.

public:
 System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ Invoke(TimeSpan timeout);
public System.Collections.Generic.IDictionary<string,object> Invoke (TimeSpan timeout);
member this.Invoke : TimeSpan -> System.Collections.Generic.IDictionary<string, obj>
Public Function Invoke (timeout As TimeSpan) As IDictionary(Of String, Object)

Параметры

timeout
TimeSpan

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

Возвращаемое значение

Словарь значений OutArgument и InOutArgument корневого действия. Ключом этих значений является имя аргумента, представляющего выходные значения рабочего процесса.

Примеры

В следующем примере вызывается рабочий процесс, содержащий два действия WriteLine и действие Delay, для которого задан срок Duration в одну минуту. Этот рабочий процесс вызывается дважды: сначала с интервалом ожидания в две минуты, а затем с интервалом ожидания в 30 секунд. Первый рабочий процесс вызывается успешно, а второй не завершается, вызывается исключение TimeoutException, и выводится следующее сообщение.

The operation did not complete within the allotted timeout of 00:00:30.   
The time allotted to this operation may have been a portion of a longer timeout.  
Activity wf = new Sequence()
{
    Activities =
    {
        new WriteLine()
        {
            Text = "Before the 1 minute delay."
        },
        new Delay()
        {
            Duration = TimeSpan.FromMinutes(1)
        },
        new WriteLine()
        {
            Text = "After the 1 minute delay."
        }
    }
};

WorkflowInvoker invoker = new WorkflowInvoker(wf);

// This workflow completes successfully.
invoker.Invoke(TimeSpan.FromMinutes(2));

// This workflow does not complete and a TimeoutException
// is thrown.
try
{
    invoker.Invoke(TimeSpan.FromSeconds(30));
}
catch (TimeoutException ex)
{
    Console.WriteLine(ex.Message);
}

Пример использования Invoke с выходными аргументами см. в разделе перегрузка Invoke с теми же параметрами, что и эта перегрузка без интервала времени ожидания.

Комментарии

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

Примечание

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

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

Invoke<TResult>(Activity<TResult>)

Вызывает рабочий процесс синхронным образом, используя определение рабочего процесса, переданное в конструктор WorkflowInvoker(Activity).

public:
generic <typename TResult>
 static TResult Invoke(System::Activities::Activity<TResult> ^ workflow);
public static TResult Invoke<TResult> (System.Activities.Activity<TResult> workflow);
static member Invoke : System.Activities.Activity<'Result> -> 'Result
Public Shared Function Invoke(Of TResult) (workflow As Activity(Of TResult)) As TResult

Параметры типа

TResult

Тип рабочего процесса.

Параметры

workflow
Activity<TResult>

Определение вызываемого рабочего процесса. Определение рабочего процесса должно быть производным от ActivityWithResult.

Возвращаемое значение

TResult

Значение типа TResult с результатом выполнения действия.

Примеры

В следующем примере вызывается рабочий процесс, состоящий из одного Add действия с двумя входными аргументами, и поскольку он является производным от CodeActivity<int> него, имеет один четко определенный Result выходной аргумент. При вызове рабочего процесса передается словарь arguments, содержащий значения каждого входного аргумента с указанием имени аргумента. При возврате вызова Invoke возвращается значение выходного Result аргумента.

public sealed class Add : CodeActivity<int>
{
    public InArgument<int> X { get; set; }
    public InArgument<int> Y { get; set; }

    protected override int Execute(CodeActivityContext context)
    {
        int x = X.Get(context);
        int y = Y.Get(context);

        return x + y;
    }
}
int x = 1;
int y = 2;

Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("X", x);
arguments.Add("Y", y);

Console.WriteLine("Invoking Add.");

int result = WorkflowInvoker.Invoke(new Add(), arguments);

Console.WriteLine("{0} + {1} = {2}", x, y, result);

Комментарии

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

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

Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>)

Вызывает рабочий процесс в синхронном режиме с использованием определения рабочего процесса и словаря входных параметров IDictionary<TKey,TValue>.

public:
generic <typename TResult>
 static TResult Invoke(System::Activities::Activity<TResult> ^ workflow, System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs);
public static TResult Invoke<TResult> (System.Activities.Activity<TResult> workflow, System.Collections.Generic.IDictionary<string,object> inputs);
static member Invoke : System.Activities.Activity<'Result> * System.Collections.Generic.IDictionary<string, obj> -> 'Result
Public Shared Function Invoke(Of TResult) (workflow As Activity(Of TResult), inputs As IDictionary(Of String, Object)) As TResult

Параметры типа

TResult

Тип рабочего процесса.

Параметры

workflow
Activity<TResult>

Определение вызываемого рабочего процесса.

inputs
IDictionary<String,Object>

Словарь входных параметров рабочего процесса, различаемых по имени аргумента.

Возвращаемое значение

TResult

Значение типа TResult с результатом выполнения действия.

Примеры

В следующем примере вызывается рабочий процесс, состоящий из одного Add действия с двумя входными аргументами, и поскольку он является производным от CodeActivity<int> него, имеет один четко определенный Result выходной аргумент. При вызове рабочего процесса передается словарь arguments, содержащий значения каждого входного аргумента с указанием имени аргумента. При возврате вызова Invoke возвращается значение выходного Result аргумента.

public sealed class Add : CodeActivity<int>
{
    public InArgument<int> X { get; set; }
    public InArgument<int> Y { get; set; }

    protected override int Execute(CodeActivityContext context)
    {
        int x = X.Get(context);
        int y = Y.Get(context);

        return x + y;
    }
}
int x = 1;
int y = 2;

Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("X", x);
arguments.Add("Y", y);

Console.WriteLine("Invoking Add.");

int result = WorkflowInvoker.Invoke(new Add(), arguments);

Console.WriteLine("{0} + {1} = {2}", x, y, result);

Комментарии

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

Примечание

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

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

Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, TimeSpan)

Вызывает рабочий процесс в синхронном режиме с использованием определения рабочего процесса, словаря входных параметров IDictionary<TKey,TValue> и интервала ожидания.

public:
generic <typename TResult>
 static TResult Invoke(System::Activities::Activity<TResult> ^ workflow, System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, TimeSpan timeout);
public static TResult Invoke<TResult> (System.Activities.Activity<TResult> workflow, System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout);
static member Invoke : System.Activities.Activity<'Result> * System.Collections.Generic.IDictionary<string, obj> * TimeSpan -> 'Result
Public Shared Function Invoke(Of TResult) (workflow As Activity(Of TResult), inputs As IDictionary(Of String, Object), timeout As TimeSpan) As TResult

Параметры типа

TResult

Тип рабочего процесса.

Параметры

workflow
Activity<TResult>

Определение вызываемого рабочего процесса.

inputs
IDictionary<String,Object>

Словарь входных параметров рабочего процесса, различаемых по имени аргумента.

timeout
TimeSpan

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

Возвращаемое значение

TResult

Значение типа TResult с результатом выполнения действия.

Примеры

В следующем примере вызывается рабочий процесс, состоящий из одного Add действия с двумя входными аргументами, и поскольку он является производным от CodeActivity<int> него, имеет один четко определенный Result выходной аргумент. При вызове рабочего процесса передается словарь arguments, содержащий значения каждого входного аргумента с указанием имени аргумента. При возврате вызова Invoke возвращается значение выходного Result аргумента.

public sealed class Add : CodeActivity<int>
{
    public InArgument<int> X { get; set; }
    public InArgument<int> Y { get; set; }

    protected override int Execute(CodeActivityContext context)
    {
        int x = X.Get(context);
        int y = Y.Get(context);

        return x + y;
    }
}
int x = 1;
int y = 2;

Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("X", x);
arguments.Add("Y", y);

Console.WriteLine("Invoking Add.");

int result = WorkflowInvoker.Invoke(new Add(), arguments);

Console.WriteLine("{0} + {1} = {2}", x, y, result);

Комментарии

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

Примечание

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

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

Invoke<TResult>(Activity<TResult>, IDictionary<String,Object>, IDictionary<String,Object>, TimeSpan)

Вызывает рабочий процесс в синхронном режиме с использованием указанного определения рабочего процесса, словаря IDictionary<TKey,TValue> входных параметров, словаря IDictionary<TKey,TValue> дополнительных выходных параметров и интервала времени ожидания.

public:
generic <typename TResult>
 static TResult Invoke(System::Activities::Activity<TResult> ^ workflow, System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, [Runtime::InteropServices::Out] System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ % additionalOutputs, TimeSpan timeout);
public static TResult Invoke<TResult> (System.Activities.Activity<TResult> workflow, System.Collections.Generic.IDictionary<string,object> inputs, out System.Collections.Generic.IDictionary<string,object> additionalOutputs, TimeSpan timeout);
static member Invoke : System.Activities.Activity<'Result> * System.Collections.Generic.IDictionary<string, obj> * IDictionary * TimeSpan -> 'Result
Public Shared Function Invoke(Of TResult) (workflow As Activity(Of TResult), inputs As IDictionary(Of String, Object), ByRef additionalOutputs As IDictionary(Of String, Object), timeout As TimeSpan) As TResult

Параметры типа

TResult

Тип рабочего процесса.

Параметры

workflow
Activity<TResult>

Определение вызываемого рабочего процесса.

inputs
IDictionary<String,Object>

Словарь входных параметров рабочего процесса, различаемых по имени аргумента.

additionalOutputs
IDictionary<String,Object>

Словарь дополнительных выходных параметров рабочего процесса, различаемых по имени аргумента.

timeout
TimeSpan

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

Возвращаемое значение

TResult

Значение типа TResult с результатом выполнения действия.

Примеры

В следующем примере вызывается рабочий процесс, состоящий из одного Add действия с двумя входными аргументами, и поскольку он является производным от CodeActivity<int> него, имеет один четко определенный Result выходной аргумент. При вызове рабочего процесса передается словарь arguments, содержащий значения каждого входного аргумента с указанием имени аргумента. При возврате вызова Invoke возвращается значение выходного Result аргумента.

public sealed class Add : CodeActivity<int>
{
    public InArgument<int> X { get; set; }
    public InArgument<int> Y { get; set; }

    protected override int Execute(CodeActivityContext context)
    {
        int x = X.Get(context);
        int y = Y.Get(context);

        return x + y;
    }
}
int x = 1;
int y = 2;

Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("X", x);
arguments.Add("Y", y);

Console.WriteLine("Invoking Add.");

int result = WorkflowInvoker.Invoke(new Add(), arguments);

Console.WriteLine("{0} + {1} = {2}", x, y, result);

Комментарии

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

Примечание

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

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