Freigeben über


WorkflowInvoker.Invoke Methode

Definition

Ruft einen Workflow synchron auf und gibt ein Wörterbuch von OutArgument- und InOutArgument-Werten der Stammaktivität nach Argumentnamen geordnet zurück, die die Ausgaben des Workflows darstellt.

Überlädt

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

Ruft einen Workflow mithilfe der angegebenen Workflowdefinition, des IDictionary<TKey,TValue> von Eingabeparametern und des Timeoutintervalls synchron auf.

Invoke(Activity, TimeSpan)

Ruft einen Workflow mithilfe der angegebenen Workflowdefinition und des Timeoutintervalls synchron auf.

Invoke(Activity, IDictionary<String,Object>)

Ruft einen Workflow mithilfe der angegebenen Workflowdefinition und des IDictionary<TKey,TValue> von Eingabeparametern synchron auf.

Invoke(IDictionary<String,Object>, TimeSpan)

Ruft die Aktivität, die an den WorkflowInvoker(Activity)-Konstruktor übergeben wurde, synchron mit dem angegebenen IDictionary<TKey,TValue> von Eingabeparametern und dem angegebenen Timeoutintervall auf.

Invoke(IDictionary<String,Object>)

Ruft die Aktivität, die an den WorkflowInvoker(Activity)-Konstruktor übergeben wurde, synchron mit dem angegebenen IDictionary<TKey,TValue> von Eingabeparametern auf.

Invoke(Activity)

Ruft einen Workflow mithilfe der angegebenen Workflowdefinition synchron auf.

Invoke()

Ruft einen Workflow mit der an den WorkflowInvoker(Activity)-Konstruktor übergebenen Workflowdefinition synchron auf.

Invoke(TimeSpan)

Ruft einen Workflow mit dem angegebenen Timeoutintervall synchron auf.

Invoke<TResult>(Activity<TResult>)

Ruft einen Workflow mit der an den WorkflowInvoker(Activity)-Konstruktor übergebenen Workflowdefinition synchron auf.

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

Ruft einen Workflow mithilfe der angegebenen Workflowdefinition und des IDictionary<TKey,TValue> von Eingabeparametern synchron auf.

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

Ruft einen Workflow mithilfe der angegebenen Workflowdefinition, des IDictionary<TKey,TValue> von Eingabeparametern und des Timeoutintervalls synchron auf.

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

Ruft einen Workflow mithilfe der angegebenen Workflowdefinition, des IDictionary<TKey,TValue> von Eingabeparametern, des IDictionary<TKey,TValue> von zusätzlichen Ausgabeparametern und des Timeoutintervalls synchron auf.

Hinweise

Diese Methode blockiert, bis der Workflow abgeschlossen ist, einschließlich der Leerlaufzeit. Die gesamte Workflowausführung erfolgt immer auf dem aufrufenden Thread. Um ein anderes Timeoutintervall für den Abschluss des Workflows zu konfigurieren, verwenden Sie eine der Invoke-Überladungen, die einen TimeSpan annehmen.

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

Ruft einen Workflow mithilfe der angegebenen Workflowdefinition, des IDictionary<TKey,TValue> von Eingabeparametern und des Timeoutintervalls synchron auf.

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)

Parameter

workflow
Activity

Die Workflowdefinition des aufzurufenden Workflows.

inputs
IDictionary<String,Object>

Das Wörterbuch von Eingabeparametern für den Workflow, nach Argumentname geordnet.

timeout
TimeSpan

Das Intervall, in dem der Workflow abgeschlossen werden muss, bevor er abgebrochen und eine TimeoutException ausgelöst wird.

Gibt zurück

Ein Wörterbuch von OutArgument- und InOutArgument-Werten der Stammaktivität, nach Argumentnamen geordnet, das die Ausgaben des Workflows darstellt.

Beispiele

Im folgenden Beispiel wird ein Workflow aufgerufen, der zwei WriteLine-Aktivitäten sowie eine Delay-Aktivität enthält, die mit einer Duration von einer Minute konfiguriert ist. Dieser Workflow wird zweimal aufgerufen: das erste Mal mit einem Timeoutintervall von zwei Minuten und das zweite Mal mit einem Timeoutintervall von 30 Sekunden. Der erste Workflow wird erfolgreich abgeschlossen, der zweite jedoch nicht, sodass eine TimeoutException ausgelöst wird.

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

Ein Beispiel für die Verwendung Invoke von mit Eingabe- und Ausgabeargumenten finden Sie in der Überladung von Invoke mit denselben Parametern wie diese Überladung ohne timeout-Intervall.

Hinweise

Diese Methode blockiert, bis der Workflow abgeschlossen ist, einschließlich der Leerlaufzeit. Die gesamte Workflowausführung erfolgt immer auf dem aufrufenden Thread. Falls der Workflow innerhalb des angegebenen Timeoutintervalls nicht abgeschlossen wird, wird der Workflow abgebrochen, und eine TimeoutException wird ausgelöst.

Hinweis

Das TimeoutException-Objekt wird nur ausgelöst, wenn das Timeoutintervall verstreicht und der Workflow während der Ausführung in den Leerlauf wechselt. Ein Workflow, der erst nach dem angegebenen Timeoutintervall abgeschlossen wird, wird dennoch erfolgreich beendet, wenn der Workflow nicht in den Leerlauf wechselt.

Gilt für:

Invoke(Activity, TimeSpan)

Ruft einen Workflow mithilfe der angegebenen Workflowdefinition und des Timeoutintervalls synchron auf.

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)

Parameter

workflow
Activity

Die Workflowdefinition des aufzurufenden Workflows.

timeout
TimeSpan

Das Intervall, in dem der Workflow abgeschlossen werden muss, bevor er abgebrochen und eine TimeoutException ausgelöst wird.

Gibt zurück

Ein Wörterbuch von OutArgument- und InOutArgument-Werten der Stammaktivität, nach Argumentnamen geordnet, das die Ausgaben des Workflows darstellt.

Beispiele

Im folgenden Beispiel wird ein Workflow aufgerufen, der zwei WriteLine-Aktivitäten sowie eine Delay-Aktivität enthält, die mit einer Duration von einer Minute konfiguriert ist. Dieser Workflow wird zweimal aufgerufen: das erste Mal mit einem Timeoutintervall von zwei Minuten und das zweite Mal mit einem Timeoutintervall von 30 Sekunden. Der erste Workflow wird erfolgreich abgeschlossen, der zweite jedoch nicht, sodass eine TimeoutException ausgelöst wird.

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

Ein Beispiel für die Verwendung Invoke von mit Ausgabeargumenten finden Sie in der Überladung von Invoke mit denselben Parametern wie diese Überladung ohne timeoutintervall.

Hinweise

Diese Methode blockiert, bis der Workflow abgeschlossen ist, einschließlich der Leerlaufzeit. Die gesamte Workflowausführung erfolgt immer auf dem aufrufenden Thread. Falls der Workflow innerhalb des angegebenen Timeoutintervalls nicht abgeschlossen wird, wird der Workflow abgebrochen, und eine TimeoutException wird ausgelöst.

Hinweis

Das TimeoutException-Objekt wird nur ausgelöst, wenn das Timeoutintervall verstreicht und der Workflow während der Ausführung in den Leerlauf wechselt. Ein Workflow, der erst nach dem angegebenen Timeoutintervall abgeschlossen wird, wird dennoch erfolgreich beendet, wenn der Workflow nicht in den Leerlauf wechselt.

Gilt für:

Invoke(Activity, IDictionary<String,Object>)

Ruft einen Workflow mithilfe der angegebenen Workflowdefinition und des IDictionary<TKey,TValue> von Eingabeparametern synchron auf.

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)

Parameter

workflow
Activity

Die Workflowdefinition des aufzurufenden Workflows.

inputs
IDictionary<String,Object>

Das Wörterbuch von Eingabeparametern für den Workflow, nach Argumentname geordnet.

Gibt zurück

Ein Wörterbuch von OutArgument- und InOutArgument-Werten der Stammaktivität, nach Argumentnamen geordnet, das die Ausgaben des Workflows darstellt.

Beispiele

Im folgenden Beispiel wird ein Workflow aufgerufen, der aus einer einzelnen Divide-Aktivität besteht, die über zwei Eingabeargumente und zwei Ausgabeargumente verfügt. Beim Aufrufen des Workflows wird das arguments-Wörterbuch übergeben, das die Werte für die einzelnen Eingabeargumente sortiert nach Argumentname enthält. Wenn der Aufruf von Invoke zurückgegeben wird, werden die einzelnen Ausgabeargumente nach Argumentname sortiert im outputs-Wörterbuch zurückgegeben.

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

Wenn der Workflow von ActivityWithResultabgeleitet wird, z CodeActivity<TResult> . B. oder Activity<TResult>, und zusätzlich zum klar definierten Result Ausgabeargument Ausgabeargumente vorhanden sind, muss eine nicht generische Überladung von Invoke, z. B. diese, verwendet werden, um die zusätzlichen Argumente abzurufen. Hierzu muss die an Invoke übergebene Workflowdefinition den Typ Activity aufweisen. In diesem Beispiel wird die Divide Aktivität von CodeActivity<int>abgeleitet, aber als Activity deklariert, sodass diese Überladung von Invokeverwendet wird, die ein Wörterbuch von Argumenten anstelle eines einzelnen Rückgabewerts zurückgibt.

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

Hinweise

Diese Methode blockiert, bis der Workflow abgeschlossen ist, einschließlich der Leerlaufzeit. Die gesamte Workflowausführung erfolgt immer auf dem aufrufenden Thread. Um ein anderes Timeoutintervall für den Abschluss des Workflows zu konfigurieren, verwenden Sie eine der Invoke-Überladungen, die einen TimeSpan annehmen.

Gilt für:

Invoke(IDictionary<String,Object>, TimeSpan)

Ruft die Aktivität, die an den WorkflowInvoker(Activity)-Konstruktor übergeben wurde, synchron mit dem angegebenen IDictionary<TKey,TValue> von Eingabeparametern und dem angegebenen Timeoutintervall auf.

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)

Parameter

inputs
IDictionary<String,Object>

Das Wörterbuch von Eingabeparametern für den Workflow, nach Argumentname geordnet.

timeout
TimeSpan

Das Intervall, in dem der Workflow abgeschlossen werden muss, bevor er abgebrochen und eine TimeoutException ausgelöst wird.

Gibt zurück

Ein Wörterbuch von OutArgument- und InOutArgument-Werten der Stammaktivität, nach Argumentnamen geordnet, das die Ausgaben des Workflows darstellt.

Beispiele

Im folgenden Beispiel wird ein Workflow aufgerufen, der zwei WriteLine-Aktivitäten sowie eine Delay-Aktivität enthält, die mit einer Duration von einer Minute konfiguriert ist. Dieser Workflow wird zweimal aufgerufen: das erste Mal mit einem Timeoutintervall von zwei Minuten und das zweite Mal mit einem Timeoutintervall von 30 Sekunden. Der erste Workflow wird erfolgreich abgeschlossen, der zweite jedoch nicht, sodass eine TimeoutException ausgelöst wird und die folgende Meldung angezeigt wird.

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

Ein Beispiel für die Verwendung Invoke von mit Eingabe- und Ausgabeargumenten finden Sie in der Überladung von Invoke mit denselben Parametern wie diese Überladung ohne timeout-Intervall.

Hinweise

Diese Methode blockiert, bis der Workflow abgeschlossen ist, einschließlich der Leerlaufzeit. Die gesamte Workflowausführung erfolgt immer auf dem aufrufenden Thread. Falls der Workflow innerhalb des angegebenen Timeoutintervalls nicht abgeschlossen wird, wird der Workflow abgebrochen, und eine TimeoutException wird ausgelöst.

Hinweis

Das TimeoutException-Objekt wird nur ausgelöst, wenn das Timeoutintervall verstreicht und der Workflow während der Ausführung in den Leerlauf wechselt. Ein Workflow, der erst nach dem angegebenen Timeoutintervall abgeschlossen wird, wird dennoch erfolgreich beendet, wenn der Workflow nicht in den Leerlauf wechselt.

Gilt für:

Invoke(IDictionary<String,Object>)

Ruft die Aktivität, die an den WorkflowInvoker(Activity)-Konstruktor übergeben wurde, synchron mit dem angegebenen IDictionary<TKey,TValue> von Eingabeparametern auf.

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)

Parameter

inputs
IDictionary<String,Object>

Das Wörterbuch von Eingabeparametern für den Workflow, nach Argumentname geordnet.

Gibt zurück

Ein Wörterbuch von OutArgument- und InOutArgument-Werten der Stammaktivität, nach Argumentnamen geordnet, das die Ausgaben des Workflows darstellt.

Beispiele

Im folgenden Beispiel wird ein Workflow aufgerufen, der aus einer einzelnen Divide-Aktivität besteht, die über zwei Eingabeargumente und zwei Ausgabeargumente verfügt. Beim Aufrufen des Workflows wird das arguments-Wörterbuch übergeben, das die Werte für die einzelnen Eingabeargumente sortiert nach Argumentname enthält. Wenn der Aufruf von Invoke zurückgegeben wird, werden die einzelnen Ausgabeargumente nach Argumentname sortiert im outputs-Wörterbuch zurückgegeben.

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

Wenn der Workflow von ActivityWithResultabgeleitet wird, z CodeActivity<TResult> . B. oder Activity<TResult>, und zusätzlich zum klar definierten Result Ausgabeargument Ausgabeargumente vorhanden sind, muss eine nicht generische Überladung von Invoke, z. B. diese, verwendet werden, um die zusätzlichen Argumente abzurufen. Dazu muss die an den WorkflowInvoker Konstruktor übergebene Workflowdefinition vom Typ Activitysein. In diesem Beispiel wird die Divide Aktivität von CodeActivity<int>abgeleitet, aber als Activity deklariert, sodass diese Überladung von Invokeverwendet wird, die ein Wörterbuch von Argumenten anstelle eines einzelnen Rückgabewerts zurückgibt.

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

Hinweise

Diese Methode blockiert, bis der Workflow abgeschlossen ist, einschließlich der Leerlaufzeit. Die gesamte Workflowausführung erfolgt immer auf dem aufrufenden Thread. Um ein anderes Timeoutintervall für den Abschluss des Workflows zu konfigurieren, verwenden Sie eine der Invoke-Überladungen, die einen TimeSpan annehmen.

Gilt für:

Invoke(Activity)

Ruft einen Workflow mithilfe der angegebenen Workflowdefinition synchron auf.

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)

Parameter

workflow
Activity

Die Workflowdefinition des aufzurufenden Workflows.

Gibt zurück

Ein Wörterbuch von OutArgument- und InOutArgument-Werten der Stammaktivität, nach Argumentnamen geordnet, das die Ausgaben des Workflows darstellt.

Beispiele

Im folgenden Beispiel wird ein Workflow aufgerufen, der aus einer einzelnen DiceRoll-Aktivität besteht. Die DiceRoll-Aktivität verfügt über zwei Ausgabeargumente, die die Ergebnisse des Würfelvorgangs darstellen. Wenn der Aufruf von Invoke zurückgegeben wird, werden die einzelnen Ausgabeargumente nach Argumentname sortiert im Ausgabewörterbuch zurückgegeben.

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

Wenn die Stammaktivität des Workflows keine Ausgabeargumente aufweist oder diese vom Host nicht benötigt werden, können sie ignoriert werden. Im folgenden Beispiel wird ein Workflow aufgerufen, der aus einer einzelnen WriteLine-Aktivität ohne Ausgabeargumente besteht.

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

WorkflowInvoker.Invoke(wf);

Hinweise

Diese Methode blockiert, bis der Workflow abgeschlossen ist, einschließlich der Leerlaufzeit. Die gesamte Workflowausführung erfolgt immer auf dem aufrufenden Thread. Um ein anderes Timeoutintervall für den Abschluss des Workflows zu konfigurieren, verwenden Sie eine der Invoke-Überladungen, die einen TimeSpan annehmen.

Gilt für:

Invoke()

Ruft einen Workflow mit der an den WorkflowInvoker(Activity)-Konstruktor übergebenen Workflowdefinition synchron auf.

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)

Gibt zurück

Ein Wörterbuch von OutArgument- und InOutArgument-Werten der Stammaktivität, nach Argumentnamen geordnet, das die Ausgaben des Workflows darstellt.

Beispiele

Im folgenden Beispiel wird ein Workflow aufgerufen, der aus einer einzelnen DiceRoll-Aktivität besteht. Die DiceRoll-Aktivität verfügt über zwei Ausgabeargumente, die die Ergebnisse des Würfelvorgangs darstellen. Wenn der Aufruf von Invoke zurückgegeben wird, werden die einzelnen Ausgabeargumente nach Argumentname sortiert im Ausgabewörterbuch zurückgegeben. Der Workflow wird zweimal aufgerufen, wobei die An den WorkflowInvoker Konstruktor übergebene Workflowdefinition verwendet wird.

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

Wenn die Stammaktivität des Workflows keine Ausgabeargumente aufweist oder diese vom Host nicht benötigt werden, können sie ignoriert werden. Im folgenden Beispiel wird ein Workflow aufgerufen, der aus einer einzelnen WriteLine-Aktivität ohne Ausgabeargumente besteht.

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

WorkflowInvoker invoker = new WorkflowInvoker(wf);

invoker.Invoke();

Hinweise

Diese Methode blockiert, bis der Workflow abgeschlossen ist, einschließlich der Leerlaufzeit. Die gesamte Workflowausführung erfolgt immer auf dem aufrufenden Thread. Um ein anderes Timeoutintervall für den Abschluss des Workflows zu konfigurieren, verwenden Sie eine der Invoke-Überladungen, die einen TimeSpan annehmen.

Gilt für:

Invoke(TimeSpan)

Ruft einen Workflow mit dem angegebenen Timeoutintervall synchron auf.

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)

Parameter

timeout
TimeSpan

Das Intervall, in dem der Workflow abgeschlossen werden muss, bevor er abgebrochen und eine TimeoutException ausgelöst wird.

Gibt zurück

Ein Wörterbuch von OutArgument- und InOutArgument-Werten der Stammaktivität, nach Argumentnamen geordnet, das die Ausgaben des Workflows darstellt.

Beispiele

Im folgenden Beispiel wird ein Workflow aufgerufen, der zwei WriteLine-Aktivitäten sowie eine Delay-Aktivität enthält, die mit einer Duration von einer Minute konfiguriert ist. Dieser Workflow wird zweimal aufgerufen: das erste Mal mit einem Timeoutintervall von zwei Minuten und das zweite Mal mit einem Timeoutintervall von 30 Sekunden. Der erste Workflow wird erfolgreich abgeschlossen, der zweite jedoch nicht, sodass eine TimeoutException ausgelöst wird und die folgende Meldung angezeigt wird.

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

Ein Beispiel für die Verwendung Invoke mit Ausgabeargumenten finden Sie unter Überladung von Invoke mit den gleichen Parametern wie diese Überladung ohne timeoutintervall.

Hinweise

Diese Methode blockiert, bis der Workflow abgeschlossen ist, einschließlich der Leerlaufzeit. Die gesamte Workflowausführung erfolgt immer auf dem aufrufenden Thread. Falls der Workflow innerhalb des angegebenen Timeoutintervalls nicht abgeschlossen wird, wird der Workflow abgebrochen, und eine TimeoutException wird ausgelöst.

Hinweis

Das TimeoutException-Objekt wird nur ausgelöst, wenn das Timeoutintervall verstreicht und der Workflow während der Ausführung in den Leerlauf wechselt. Ein Workflow, der erst nach dem angegebenen Timeoutintervall abgeschlossen wird, wird dennoch erfolgreich beendet, wenn der Workflow nicht in den Leerlauf wechselt.

Gilt für:

Invoke<TResult>(Activity<TResult>)

Ruft einen Workflow mit der an den WorkflowInvoker(Activity)-Konstruktor übergebenen Workflowdefinition synchron auf.

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

Typparameter

TResult

Der Typ des Workflows.

Parameter

workflow
Activity<TResult>

Die Workflowdefinition des aufzurufenden Workflows. Die Workflowdefinition muss von ActivityWithResult abgeleitet sind.

Gibt zurück

TResult

Ein Wert des Typs TResult mit dem Ergebnis der Aktivitätsausführung.

Beispiele

Im folgenden Beispiel wird ein Workflow aufgerufen, der aus einer einzelnen Add Aktivität besteht, die über zwei Eingabeargumente und ein klar definiertes CodeActivity<int>Result Ausgabeargument verfügt. Beim Aufrufen des Workflows wird das arguments-Wörterbuch übergeben, das die Werte für die einzelnen Eingabeargumente sortiert nach Argumentname enthält. Wenn der Aufruf von Invoke zurückgibt, wird der Wert des Result Ausgabearguments zurückgegeben.

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

Hinweise

Diese Methode blockiert, bis der Workflow abgeschlossen ist, einschließlich der Leerlaufzeit. Die gesamte Workflowausführung erfolgt immer auf dem aufrufenden Thread. Um ein anderes Timeoutintervall für den Abschluss des Workflows zu konfigurieren, verwenden Sie eine der Invoke-Überladungen, die einen TimeSpan annehmen.

Gilt für:

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

Ruft einen Workflow mithilfe der angegebenen Workflowdefinition und des IDictionary<TKey,TValue> von Eingabeparametern synchron auf.

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

Typparameter

TResult

Der Typ des Workflows.

Parameter

workflow
Activity<TResult>

Die Workflowdefinition des aufzurufenden Workflows.

inputs
IDictionary<String,Object>

Das Wörterbuch von Eingabeparametern für den Workflow, nach Argumentname geordnet.

Gibt zurück

TResult

Ein Wert des Typs TResult mit dem Ergebnis der Aktivitätsausführung.

Beispiele

Im folgenden Beispiel wird ein Workflow aufgerufen, der aus einer einzelnen Add Aktivität besteht, die über zwei Eingabeargumente und ein klar definiertes CodeActivity<int>Result Ausgabeargument verfügt. Beim Aufrufen des Workflows wird das arguments-Wörterbuch übergeben, das die Werte für die einzelnen Eingabeargumente sortiert nach Argumentname enthält. Wenn der Aufruf von Invoke zurückgibt, wird der Wert des Result Ausgabearguments zurückgegeben.

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

Hinweise

Diese Methode blockiert, bis der Workflow abgeschlossen ist, einschließlich der Leerlaufzeit. Die gesamte Workflowausführung erfolgt immer auf dem aufrufenden Thread. Um ein anderes Timeoutintervall für den Abschluss des Workflows zu konfigurieren, verwenden Sie eine der Invoke-Überladungen, die einen TimeSpan annehmen.

Hinweis

Das TimeoutException-Objekt wird nur ausgelöst, wenn das Timeoutintervall verstreicht und der Workflow während der Ausführung in den Leerlauf wechselt. Ein Workflow, der erst nach dem angegebenen Timeoutintervall abgeschlossen wird, wird dennoch erfolgreich beendet, wenn der Workflow nicht in den Leerlauf wechselt.

Gilt für:

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

Ruft einen Workflow mithilfe der angegebenen Workflowdefinition, des IDictionary<TKey,TValue> von Eingabeparametern und des Timeoutintervalls synchron auf.

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

Typparameter

TResult

Der Typ des Workflows.

Parameter

workflow
Activity<TResult>

Die Workflowdefinition des aufzurufenden Workflows.

inputs
IDictionary<String,Object>

Das Wörterbuch von Eingabeparametern für den Workflow, nach Argumentname geordnet.

timeout
TimeSpan

Das Intervall, in dem der Workflow abgeschlossen werden muss, bevor er abgebrochen und eine TimeoutException ausgelöst wird.

Gibt zurück

TResult

Ein Wert des Typs TResult mit dem Ergebnis der Aktivitätsausführung.

Beispiele

Im folgenden Beispiel wird ein Workflow aufgerufen, der aus einer einzelnen Add Aktivität besteht, die über zwei Eingabeargumente und ein klar definiertes CodeActivity<int>Result Ausgabeargument verfügt. Beim Aufrufen des Workflows wird das arguments-Wörterbuch übergeben, das die Werte für die einzelnen Eingabeargumente sortiert nach Argumentname enthält. Wenn der Aufruf von Invoke zurückgibt, wird der Wert des Result Ausgabearguments zurückgegeben.

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

Hinweise

Diese Methode blockiert, bis der Workflow abgeschlossen ist, einschließlich der Leerlaufzeit. Die gesamte Workflowausführung erfolgt immer auf dem aufrufenden Thread. Falls der Workflow innerhalb des angegebenen Timeoutintervalls nicht abgeschlossen wird, wird der Workflow abgebrochen, und eine TimeoutException wird ausgelöst.

Hinweis

Das TimeoutException-Objekt wird nur ausgelöst, wenn das Timeoutintervall verstreicht und der Workflow während der Ausführung in den Leerlauf wechselt. Ein Workflow, der erst nach dem angegebenen Timeoutintervall abgeschlossen wird, wird dennoch erfolgreich beendet, wenn der Workflow nicht in den Leerlauf wechselt.

Gilt für:

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

Ruft einen Workflow mithilfe der angegebenen Workflowdefinition, des IDictionary<TKey,TValue> von Eingabeparametern, des IDictionary<TKey,TValue> von zusätzlichen Ausgabeparametern und des Timeoutintervalls synchron auf.

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

Typparameter

TResult

Der Typ des Workflows.

Parameter

workflow
Activity<TResult>

Die Workflowdefinition des aufzurufenden Workflows.

inputs
IDictionary<String,Object>

Das Wörterbuch von Eingabeparametern für den Workflow, nach Argumentname geordnet.

additionalOutputs
IDictionary<String,Object>

Das Wörterbuch von zusätzlichen Ausgabeparametern für den Workflow, nach Argumentname geordnet.

timeout
TimeSpan

Das Intervall, in dem der Workflow abgeschlossen werden muss, bevor er abgebrochen und eine TimeoutException ausgelöst wird.

Gibt zurück

TResult

Ein Wert des Typs TResult mit dem Ergebnis der Aktivitätsausführung.

Beispiele

Im folgenden Beispiel wird ein Workflow aufgerufen, der aus einer einzelnen Add Aktivität besteht, die über zwei Eingabeargumente und ein klar definiertes CodeActivity<int>Result Ausgabeargument verfügt. Beim Aufrufen des Workflows wird das arguments-Wörterbuch übergeben, das die Werte für die einzelnen Eingabeargumente sortiert nach Argumentname enthält. Wenn der Aufruf von Invoke zurückgibt, wird der Wert des Result Ausgabearguments zurückgegeben.

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

Hinweise

Diese Methode blockiert, bis der Workflow abgeschlossen ist, einschließlich der Leerlaufzeit. Die gesamte Workflowausführung erfolgt immer auf dem aufrufenden Thread. Falls der Workflow innerhalb des angegebenen Timeoutintervalls nicht abgeschlossen wird, wird der Workflow abgebrochen, und eine TimeoutException wird ausgelöst.

Hinweis

Das TimeoutException-Objekt wird nur ausgelöst, wenn das Timeoutintervall verstreicht und der Workflow während der Ausführung in den Leerlauf wechselt. Ein Workflow, der erst nach dem angegebenen Timeoutintervall abgeschlossen wird, wird dennoch erfolgreich beendet, wenn der Workflow nicht in den Leerlauf wechselt.

Gilt für: