WorkflowInvoker.Invoke 方法

定义

以同步方式调用工作流,返回根活动的 OutArgumentInOutArgument 值字典(由表示工作流输出的自变量名键控)。

重载

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> 和超时间隔以同步方式调用工作流。

注解

此方法将一直受到阻止,直到工作流已完成(包括空闲时间)。 保证所有工作流执行都在调用线程上执行。 若要配置工作流必须在其间完成的超时间隔,请使用一种采用 InvokeTimeSpan 重载。

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 之前在其中完成的时间间隔。

返回

根活动的 OutArgumentInOutArgument 值字典,由表示工作流输出的自变量名键控。

示例

下面的示例调用了一个工作流,该工作流包含两个 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 之前在其中完成的时间间隔。

返回

根活动的 OutArgumentInOutArgument 值字典,由表示工作流输出的自变量名键控。

示例

下面的示例调用了一个工作流,该工作流包含两个 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>

由自变量名称键控的工作流输入参数字典。

返回

根活动的 OutArgumentInOutArgument 值字典,由表示工作流输出的自变量名键控。

示例

下面的示例调用一个工作流,该工作流包含有两个输入自变量和两个输出自变量的单个 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"]);

注解

此方法将一直受到阻止,直到工作流已完成(包括空闲时间)。 保证所有工作流执行都在调用线程上执行。 若要配置工作流必须在其间完成的超时间隔,请使用一种采用 InvokeTimeSpan 重载。

适用于

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 之前在其中完成的时间间隔。

返回

根活动的 OutArgumentInOutArgument 值字典,由表示工作流输出的自变量名键控。

示例

下面的示例调用了一个工作流,该工作流包含两个 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>

由自变量名称键控的工作流输入参数字典。

返回

根活动的 OutArgumentInOutArgument 值字典,由表示工作流输出的自变量名键控。

示例

下面的示例调用一个工作流,该工作流包含有两个输入自变量和两个输出自变量的单个 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"]);

注解

此方法将一直受到阻止,直到工作流已完成(包括空闲时间)。 保证所有工作流执行都在调用线程上执行。 若要配置工作流必须在其间完成的超时间隔,请使用一种采用 InvokeTimeSpan 重载。

适用于

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

要调用的工作流的工作流定义。

返回

根活动的 OutArgumentInOutArgument 值字典,由表示工作流输出的自变量名键控。

示例

下面的示例调用包含单个 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);

注解

此方法将一直受到阻止,直到工作流已完成(包括空闲时间)。 保证所有工作流执行都在调用线程上执行。 若要配置工作流必须在其间完成的超时间隔,请使用一种采用 InvokeTimeSpan 重载。

适用于

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)

返回

根活动的 OutArgumentInOutArgument 值字典,由表示工作流输出的自变量名键控。

示例

下面的示例调用包含单个 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();

注解

此方法将一直受到阻止,直到工作流已完成(包括空闲时间)。 保证所有工作流执行都在调用线程上执行。 若要配置工作流必须在其间完成的超时间隔,请使用一种采用 InvokeTimeSpan 重载。

适用于

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 之前在其中完成的时间间隔。

返回

根活动的 OutArgumentInOutArgument 值字典,由表示工作流输出的自变量名键控。

示例

下面的示例调用了一个工作流,该工作流包含两个 WriteLine 活动和一个 Delay 活动(使用 Duration 配置为一分钟)。 此工作流调用两次;第一次使用的超时间隔为两分钟,第二次使用的超时间隔为 30 秒。 第一个工作流成功完成,但第二个工作流未成功完成,而是引发 TimeoutException 并显示下面的消息。

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

WorkflowInvoker invoker = new WorkflowInvoker(wf);

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

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

有关将 与输出参数一 Invoke 起使用的示例,请参阅 的重载 Invoke ,其参数与此重载相同,没有超时间隔。

注解

此方法将一直受到阻止,直到工作流已完成(包括空闲时间)。 保证所有工作流执行都在调用线程上执行。 如果工作流未在指定的超时间隔内完成,那么工作流就会被中止,并且会引发 TimeoutException

注意

仅在达到超时间隔且工作流在执行期间进入空闲状态时才会引发 TimeoutException。 如果工作流未进入空闲状态,那么完成时间超过指定超时间隔的工作流将会成功完成。

适用于

Invoke<TResult>(Activity<TResult>)

使用传递给 WorkflowInvoker(Activity) 构造函数的工作流定义以同步方式调用工作流。

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

类型参数

TResult

工作流的类型。

参数

workflow
Activity<TResult>

要调用的工作流的工作流定义。 工作流定义需要从 ActivityWithResult 派生。

返回

TResult

用于活动执行结果的 TResult 类型的值。

示例

以下示例调用一个工作流,该工作流由具有两个输入参数的单个 Add 活动组成,并且由于它派生自 CodeActivity<int> 它具有一个定义 Result 完善的输出参数。 调用工作流时,会传递包含每个输入自变量的值的 arguments 字典(由自变量名键控)。 对 的调用 Invoke 返回时,将返回输出参数的值 Result

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

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

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

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

Console.WriteLine("Invoking Add.");

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

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

注解

此方法将一直受到阻止,直到工作流已完成(包括空闲时间)。 保证所有工作流执行都在调用线程上执行。 若要配置工作流必须在其间完成的超时间隔,请使用一种采用 InvokeTimeSpan 重载。

适用于

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

使用指定的工作流定义和输入参数的 IDictionary<TKey,TValue> 以同步方式调用工作流。

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

类型参数

TResult

工作流的类型。

参数

workflow
Activity<TResult>

要调用的工作流的工作流定义。

inputs
IDictionary<String,Object>

由自变量名称键控的工作流输入参数字典。

返回

TResult

用于活动执行结果的 TResult 类型的值。

示例

以下示例调用一个工作流,该工作流由具有两个输入参数的单个 Add 活动组成,并且由于它派生自 CodeActivity<int> 它具有一个定义 Result 完善的输出参数。 调用工作流时,会传递包含每个输入自变量的值的 arguments 字典(由自变量名键控)。 对 的调用 Invoke 返回时,将返回输出参数的值 Result

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

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

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

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

Console.WriteLine("Invoking Add.");

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

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

注解

此方法将一直受到阻止,直到工作流已完成(包括空闲时间)。 保证所有工作流执行都在调用线程上执行。 若要配置工作流必须在其间完成的超时间隔,请使用一种采用 InvokeTimeSpan 重载。

注意

仅在达到超时间隔且工作流在执行期间进入空闲状态时才会引发 TimeoutException。 如果工作流未进入空闲状态,那么完成时间超过指定超时间隔的工作流将会成功完成。

适用于

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

使用指定的工作流定义、输入参数的 IDictionary<TKey,TValue> 和超时间隔以同步方式调用工作流。

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

类型参数

TResult

工作流的类型。

参数

workflow
Activity<TResult>

要调用的工作流的工作流定义。

inputs
IDictionary<String,Object>

由自变量名称键控的工作流输入参数字典。

timeout
TimeSpan

工作流必须在被中止和引发 TimeoutException 之前在其中完成的时间间隔。

返回

TResult

用于活动执行结果的 TResult 类型的值。

示例

以下示例调用一个工作流,该工作流由具有两个输入参数的单个 Add 活动组成,并且由于它派生自 CodeActivity<int> 它具有一个定义 Result 完善的输出参数。 调用工作流时,会传递包含每个输入自变量的值的 arguments 字典(由自变量名键控)。 对 的调用 Invoke 返回时,将返回输出参数的值 Result

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

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

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

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

Console.WriteLine("Invoking Add.");

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

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

注解

此方法将一直受到阻止,直到工作流已完成(包括空闲时间)。 保证所有工作流执行都在调用线程上执行。 如果工作流未在指定的超时间隔内完成,那么工作流就会被中止,并且会引发 TimeoutException

注意

仅在达到超时间隔且工作流在执行期间进入空闲状态时才会引发 TimeoutException。 如果工作流未进入空闲状态,那么完成时间超过指定超时间隔的工作流将会成功完成。

适用于

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

使用指定的工作流定义、输入参数的 IDictionary<TKey,TValue>、其他输出参数的 IDictionary<TKey,TValue> 和超时间隔以同步方式调用工作流。

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

类型参数

TResult

工作流的类型。

参数

workflow
Activity<TResult>

要调用的工作流的工作流定义。

inputs
IDictionary<String,Object>

由自变量名称键控的工作流输入参数字典。

additionalOutputs
IDictionary<String,Object>

工作流的其他输出参数字典,由自变量名称键控。

timeout
TimeSpan

工作流必须在被中止和引发 TimeoutException 之前在其中完成的时间间隔。

返回

TResult

用于活动执行结果的 TResult 类型的值。

示例

以下示例调用一个工作流,该工作流由具有两个输入参数的单个 Add 活动组成,并且由于它派生自 CodeActivity<int> 它具有一个定义 Result 完善的输出参数。 调用工作流时,会传递包含每个输入自变量的值的 arguments 字典(由自变量名键控)。 对 的调用 Invoke 返回时,将返回输出参数的值 Result

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

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

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

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

Console.WriteLine("Invoking Add.");

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

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

注解

此方法将一直受到阻止,直到工作流已完成(包括空闲时间)。 保证所有工作流执行都在调用线程上执行。 如果工作流未在指定的超时间隔内完成,那么工作流就会被中止,并且会引发 TimeoutException

注意

仅在达到超时间隔且工作流在执行期间进入空闲状态时才会引发 TimeoutException。 如果工作流未进入空闲状态,那么完成时间超过指定超时间隔的工作流将会成功完成。

适用于