Прочитать на английском

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


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<string,object> Invoke (System.Activities.Activity workflow, System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout);

Параметры

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 создается только в случае, если время ожидания истекло и рабочий процесс перешел в состояние бездействия во время выполнения. Рабочий процесс, не завершающийся в течение отведенного времени ожидания, завершается успешно, если не переходит в состояние простоя.

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

.NET Framework 4.8.1 и другие версии
Продукт Версии
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Invoke(Activity, TimeSpan)

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

public static System.Collections.Generic.IDictionary<string,object> Invoke (System.Activities.Activity workflow, TimeSpan timeout);

Параметры

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 создается только в случае, если время ожидания истекло и рабочий процесс перешел в состояние бездействия во время выполнения. Рабочий процесс, не завершающийся в течение отведенного времени ожидания, завершается успешно, если не переходит в состояние простоя.

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

.NET Framework 4.8.1 и другие версии
Продукт Версии
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Invoke(Activity, IDictionary<String,Object>)

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

public static System.Collections.Generic.IDictionary<string,object> Invoke (System.Activities.Activity workflow, System.Collections.Generic.IDictionary<string,object> inputs);

Параметры

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.

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

.NET Framework 4.8.1 и другие версии
Продукт Версии
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Invoke(IDictionary<String,Object>, TimeSpan)

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

public System.Collections.Generic.IDictionary<string,object> Invoke (System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout);

Параметры

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 создается только в случае, если время ожидания истекло и рабочий процесс перешел в состояние бездействия во время выполнения. Рабочий процесс, не завершающийся в течение отведенного времени ожидания, завершается успешно, если не переходит в состояние простоя.

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

.NET Framework 4.8.1 и другие версии
Продукт Версии
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Invoke(IDictionary<String,Object>)

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

public System.Collections.Generic.IDictionary<string,object> Invoke (System.Collections.Generic.IDictionary<string,object> inputs);

Параметры

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.

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

.NET Framework 4.8.1 и другие версии
Продукт Версии
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Invoke(Activity)

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

public static System.Collections.Generic.IDictionary<string,object> Invoke (System.Activities.Activity workflow);

Параметры

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.

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

.NET Framework 4.8.1 и другие версии
Продукт Версии
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Invoke()

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

public System.Collections.Generic.IDictionary<string,object> Invoke ();

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

Словарь значений 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.

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

.NET Framework 4.8.1 и другие версии
Продукт Версии
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Invoke(TimeSpan)

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

public System.Collections.Generic.IDictionary<string,object> Invoke (TimeSpan timeout);

Параметры

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 создается только в случае, если время ожидания истекло и рабочий процесс перешел в состояние бездействия во время выполнения. Рабочий процесс, не завершающийся в течение отведенного времени ожидания, завершается успешно, если не переходит в состояние простоя.

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

.NET Framework 4.8.1 и другие версии
Продукт Версии
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Invoke<TResult>(Activity<TResult>)

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

public static TResult Invoke<TResult> (System.Activities.Activity<TResult> workflow);

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

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.

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

.NET Framework 4.8.1 и другие версии
Продукт Версии
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

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

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

public static TResult Invoke<TResult> (System.Activities.Activity<TResult> workflow, System.Collections.Generic.IDictionary<string,object> inputs);

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

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 создается только в случае, если время ожидания истекло и рабочий процесс перешел в состояние бездействия во время выполнения. Рабочий процесс, не завершающийся в течение отведенного времени ожидания, завершается успешно, если не переходит в состояние простоя.

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

.NET Framework 4.8.1 и другие версии
Продукт Версии
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

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

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

public static TResult Invoke<TResult> (System.Activities.Activity<TResult> workflow, System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout);

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

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 создается только в случае, если время ожидания истекло и рабочий процесс перешел в состояние бездействия во время выполнения. Рабочий процесс, не завершающийся в течение отведенного времени ожидания, завершается успешно, если не переходит в состояние простоя.

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

.NET Framework 4.8.1 и другие версии
Продукт Версии
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

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

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

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

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

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 создается только в случае, если время ожидания истекло и рабочий процесс перешел в состояние бездействия во время выполнения. Рабочий процесс, не завершающийся в течение отведенного времени ожидания, завершается успешно, если не переходит в состояние простоя.

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

.NET Framework 4.8.1 и другие версии
Продукт Версии
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1