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