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