WorkflowInvoker.Invoke Metoda

Definicja

Wywołuje przepływ pracy synchronicznie i zwraca słownik wartości i InOutArgument wartości działania OutArgument głównego kluczy według nazwy argumentu reprezentujące dane wyjściowe przepływu pracy.

Przeciążenia

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

Wywołuje przepływ pracy synchronicznie przy użyciu określonej definicji przepływu pracy, IDictionary<TKey,TValue> parametrów wejściowych i interwału limitu czasu.

Invoke(Activity, TimeSpan)

Wywołuje przepływ pracy synchronicznie przy użyciu określonej definicji przepływu pracy i interwału limitu czasu.

Invoke(Activity, IDictionary<String,Object>)

Wywołuje przepływ pracy synchronicznie przy użyciu określonej definicji przepływu pracy i IDictionary<TKey,TValue> parametrów wejściowych.

Invoke(IDictionary<String,Object>, TimeSpan)

Wywołuje działanie przekazywane do konstruktora WorkflowInvoker(Activity) synchronicznie z określonymi IDictionary<TKey,TValue> parametrami wejściowymi i określonym interwałem limitu czasu.

Invoke(IDictionary<String,Object>)

Wywołuje działanie przekazywane do konstruktora WorkflowInvoker(Activity) synchronicznie z określonymi IDictionary<TKey,TValue> parametrami wejściowymi.

Invoke(Activity)

Wywołuje przepływ pracy synchronicznie przy użyciu określonej definicji przepływu pracy.

Invoke()

Wywołuje przepływ pracy synchronicznie przy użyciu definicji przepływu pracy przekazanej do konstruktora WorkflowInvoker(Activity) .

Invoke(TimeSpan)

Wywołuje przepływ pracy synchronicznie z określonym interwałem limitu czasu.

Invoke<TResult>(Activity<TResult>)

Wywołuje przepływ pracy synchronicznie przy użyciu definicji przepływu pracy przekazanej do konstruktora WorkflowInvoker(Activity) .

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

Wywołuje przepływ pracy synchronicznie przy użyciu określonej definicji przepływu pracy i IDictionary<TKey,TValue> parametrów wejściowych.

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

Wywołuje przepływ pracy synchronicznie przy użyciu określonej definicji przepływu pracy, IDictionary<TKey,TValue> parametrów wejściowych i interwału limitu czasu.

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

Wywołuje przepływ pracy synchronicznie przy użyciu określonej definicji przepływu pracy, IDictionary<TKey,TValue> parametrów wejściowych, IDictionary<TKey,TValue> dodatkowych parametrów wyjściowych i interwału limitu czasu.

Uwagi

Ta metoda blokuje działanie do momentu ukończenia przepływu pracy, w tym czasu bezczynności. Całe wykonanie przepływu pracy jest gwarantowane do wykonania w wątku wywołującym. Aby skonfigurować interwał limitu czasu, w którym przepływ pracy musi zostać ukończony, użyj jednego z Invoke przeciążeń, które zajmują wartość TimeSpan.

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

Wywołuje przepływ pracy synchronicznie przy użyciu określonej definicji przepływu pracy, IDictionary<TKey,TValue> parametrów wejściowych i interwału limitu czasu.

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)

Parametry

workflow
Activity

Definicja przepływu pracy przepływu pracy do wywołania.

inputs
IDictionary<String,Object>

Słownik parametrów wejściowych przepływu pracy, do których kluczem jest nazwa argumentu.

timeout
TimeSpan

Interwał, w którym przepływ pracy musi zostać zakończony przed przerwaniem i TimeoutException jest zgłaszany.

Zwraca

Słownik wartości i InOutArgument działań OutArgument głównych kluczy według nazwy argumentu reprezentujące dane wyjściowe przepływu pracy.

Przykłady

Poniższy przykład wywołuje przepływ pracy, który zawiera dwa WriteLine działania i Delay działanie skonfigurowane z minutą Duration . Ten przepływ pracy jest wywoływany dwa razy; po raz pierwszy z interwałem limitu czasu wynoszącym dwie minuty, a drugi z interwałem limitu czasu wynoszącym 30 sekund. Pierwszy przepływ pracy zakończy się pomyślnie, ale drugi nie i TimeoutException jest zgłaszany.

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

Aby zapoznać się z przykładem użycia Invoke z argumentami wejściowymi i wyjściowymi, zobacz przeciążenie Invoke z tymi samymi parametrami co to przeciążenie bez interwału limitu czasu.

Uwagi

Ta metoda blokuje działanie do momentu ukończenia przepływu pracy, w tym czasu bezczynności. Całe wykonanie przepływu pracy jest gwarantowane do wykonania w wątku wywołującym. Jeśli przepływ pracy nie zostanie ukończony w określonym interwale limitu czasu, przepływ pracy zostanie przerwany i TimeoutException zostanie zgłoszony.

Uwaga

Parametr TimeoutException jest zgłaszany tylko wtedy, gdy upłynie interwał limitu czasu, a przepływ pracy stanie się bezczynny podczas wykonywania. Przepływ pracy, który trwa dłużej niż określony interwał przekroczenia limitu czasu, zostanie ukończony pomyślnie, jeśli przepływ pracy nie stanie się bezczynny.

Dotyczy

Invoke(Activity, TimeSpan)

Wywołuje przepływ pracy synchronicznie przy użyciu określonej definicji przepływu pracy i interwału limitu czasu.

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)

Parametry

workflow
Activity

Definicja przepływu pracy przepływu pracy do wywołania.

timeout
TimeSpan

Interwał, w którym przepływ pracy musi zostać zakończony przed przerwaniem i TimeoutException jest zgłaszany.

Zwraca

Słownik wartości i InOutArgument działań OutArgument głównych kluczy według nazwy argumentu reprezentujące dane wyjściowe przepływu pracy.

Przykłady

Poniższy przykład wywołuje przepływ pracy, który zawiera dwa WriteLine działania i Delay działanie skonfigurowane z minutą Duration . Ten przepływ pracy jest wywoływany dwa razy; po raz pierwszy z interwałem limitu czasu wynoszącym dwie minuty, a drugi z interwałem limitu czasu wynoszącym 30 sekund. Pierwszy przepływ pracy zakończy się pomyślnie, ale drugi nie i TimeoutException jest zgłaszany.

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

Aby zapoznać się z przykładem użycia Invoke argumentów wyjściowych, zobacz przeciążenie Invoke z tymi samymi parametrami co to przeciążenie bez interwału limitu czasu.

Uwagi

Ta metoda blokuje działanie do momentu ukończenia przepływu pracy, w tym czasu bezczynności. Całe wykonanie przepływu pracy jest gwarantowane do wykonania w wątku wywołującym. Jeśli przepływ pracy nie zostanie ukończony w określonym interwale limitu czasu, przepływ pracy zostanie przerwany i TimeoutException zostanie zgłoszony.

Uwaga

Parametr TimeoutException jest zgłaszany tylko wtedy, gdy upłynie interwał limitu czasu, a przepływ pracy stanie się bezczynny podczas wykonywania. Przepływ pracy, który trwa dłużej niż określony interwał przekroczenia limitu czasu, zostanie ukończony pomyślnie, jeśli przepływ pracy nie stanie się bezczynny.

Dotyczy

Invoke(Activity, IDictionary<String,Object>)

Wywołuje przepływ pracy synchronicznie przy użyciu określonej definicji przepływu pracy i IDictionary<TKey,TValue> parametrów wejściowych.

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)

Parametry

workflow
Activity

Definicja przepływu pracy przepływu pracy do wywołania.

inputs
IDictionary<String,Object>

Słownik parametrów wejściowych przepływu pracy, do których kluczem jest nazwa argumentu.

Zwraca

Słownik wartości i InOutArgument działań OutArgument głównych kluczy według nazwy argumentu reprezentujące dane wyjściowe przepływu pracy.

Przykłady

Poniższy przykład wywołuje przepływ pracy składający się z jednego Divide działania, który ma dwa argumenty wejściowe i dwa argumenty wyjściowe. Po wywołaniu przepływu pracy słownik jest przekazywany, arguments który zawiera wartości dla każdego argumentu wejściowego, kluczem według nazwy argumentu. Gdy wywołanie funkcji Invoke zwraca, każdy argument wyjściowy jest zwracany w słowniku, również w kluczu outputs przez nazwę argumentu.

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

Jeśli przepływ pracy pochodzi z ActivityWithResult, takich jak CodeActivity<TResult> lub Activity<TResult>, i istnieją argumenty wyjściowe oprócz dobrze zdefiniowanego Result argumentu Invokewyjściowego, nieogólne przeciążenie , takie jak ten, należy użyć w celu pobrania dodatkowych argumentów. W tym celu definicja przepływu pracy przekazana do Invoke musi być typu Activity. W tym przykładzie Divide działanie pochodzi z CodeActivity<int>klasy , ale jest zadeklarowane jako Activity tak, aby to przeciążenie Invokeelementu , które zwraca słownik argumentów zamiast pojedynczej wartości zwracanej, jest używane.

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

Uwagi

Ta metoda blokuje działanie do momentu ukończenia przepływu pracy, w tym czasu bezczynności. Całe wykonanie przepływu pracy jest gwarantowane do wykonania w wątku wywołującym. Aby skonfigurować interwał limitu czasu, w którym przepływ pracy musi zostać ukończony, użyj jednego z Invoke przeciążeń, które zajmują wartość TimeSpan.

Dotyczy

Invoke(IDictionary<String,Object>, TimeSpan)

Wywołuje działanie przekazywane do konstruktora WorkflowInvoker(Activity) synchronicznie z określonymi IDictionary<TKey,TValue> parametrami wejściowymi i określonym interwałem limitu czasu.

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)

Parametry

inputs
IDictionary<String,Object>

Słownik parametrów wejściowych przepływu pracy, do których kluczem jest nazwa argumentu.

timeout
TimeSpan

Interwał, w którym przepływ pracy musi zostać zakończony przed przerwaniem i TimeoutException jest zgłaszany.

Zwraca

Słownik wartości i InOutArgument działań OutArgument głównych kluczy według nazwy argumentu reprezentujące dane wyjściowe przepływu pracy.

Przykłady

Poniższy przykład wywołuje przepływ pracy, który zawiera dwa WriteLine działania i Delay działanie skonfigurowane z minutą Duration . Ten przepływ pracy jest wywoływany dwa razy; po raz pierwszy z interwałem limitu czasu wynoszącym dwie minuty, a drugi z interwałem limitu czasu wynoszącym 30 sekund. Pierwszy przepływ pracy zostanie ukończony pomyślnie, ale drugi nie i TimeoutException zostanie zgłoszony, a zostanie wyświetlony następujący komunikat.

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

Aby zapoznać się z przykładem użycia Invoke z argumentami wejściowymi i wyjściowymi, zobacz przeciążenie Invoke z tymi samymi parametrami co to przeciążenie bez interwału limitu czasu.

Uwagi

Ta metoda blokuje działanie do momentu ukończenia przepływu pracy, w tym czasu bezczynności. Całe wykonanie przepływu pracy jest gwarantowane do wykonania w wątku wywołującym. Jeśli przepływ pracy nie zostanie ukończony w określonym interwale limitu czasu, przepływ pracy zostanie przerwany i TimeoutException zostanie zgłoszony.

Uwaga

Parametr TimeoutException jest zgłaszany tylko wtedy, gdy upłynie interwał limitu czasu, a przepływ pracy stanie się bezczynny podczas wykonywania. Przepływ pracy, który trwa dłużej niż określony interwał przekroczenia limitu czasu, zostanie ukończony pomyślnie, jeśli przepływ pracy nie stanie się bezczynny.

Dotyczy

Invoke(IDictionary<String,Object>)

Wywołuje działanie przekazywane do konstruktora WorkflowInvoker(Activity) synchronicznie z określonymi IDictionary<TKey,TValue> parametrami wejściowymi.

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)

Parametry

inputs
IDictionary<String,Object>

Słownik parametrów wejściowych przepływu pracy, do których kluczem jest nazwa argumentu.

Zwraca

Słownik wartości i InOutArgument działań OutArgument głównych kluczy według nazwy argumentu reprezentujące dane wyjściowe przepływu pracy.

Przykłady

Poniższy przykład wywołuje przepływ pracy składający się z jednego Divide działania, który ma dwa argumenty wejściowe i dwa argumenty wyjściowe. Po wywołaniu przepływu pracy słownik jest przekazywany, arguments który zawiera wartości dla każdego argumentu wejściowego, kluczem według nazwy argumentu. Gdy wywołanie funkcji Invoke zwraca, każdy argument wyjściowy jest zwracany w słowniku, również w kluczu outputs przez nazwę argumentu.

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

Jeśli przepływ pracy pochodzi z ActivityWithResult, takich jak CodeActivity<TResult> lub Activity<TResult>, i istnieją argumenty wyjściowe oprócz dobrze zdefiniowanego Result argumentu Invokewyjściowego, nieogólne przeciążenie , takie jak ten, należy użyć w celu pobrania dodatkowych argumentów. W tym celu definicja przepływu pracy przekazana do konstruktora WorkflowInvoker musi być typu Activity. W tym przykładzie Divide działanie pochodzi z CodeActivity<int>klasy , ale jest zadeklarowane jako Activity tak, aby to przeciążenie Invokeelementu , które zwraca słownik argumentów zamiast pojedynczej wartości zwracanej, jest używane.

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

Uwagi

Ta metoda blokuje działanie do momentu ukończenia przepływu pracy, w tym czasu bezczynności. Całe wykonanie przepływu pracy jest gwarantowane do wykonania w wątku wywołującym. Aby skonfigurować interwał limitu czasu, w którym przepływ pracy musi zostać ukończony, użyj jednego z Invoke przeciążeń, które zajmują wartość TimeSpan.

Dotyczy

Invoke(Activity)

Wywołuje przepływ pracy synchronicznie przy użyciu określonej definicji przepływu pracy.

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)

Parametry

workflow
Activity

Definicja przepływu pracy przepływu pracy do wywołania.

Zwraca

Słownik wartości i InOutArgument działań OutArgument głównych kluczy według nazwy argumentu reprezentujące dane wyjściowe przepływu pracy.

Przykłady

Poniższy przykład wywołuje przepływ pracy składający się z jednego DiceRoll działania. Działanie DiceRoll ma dwa argumenty wyjściowe reprezentujące wyniki operacji rzutowania kostką. Gdy wywołanie funkcji Invoke zwraca, każdy argument wyjściowy jest zwracany w słowniku danych wyjściowych, kluczem według nazwy argumentu.

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

Jeśli działanie główne przepływu pracy nie ma argumentów wyjściowych lub nie są one wymagane przez hosta, można je zignorować. Poniższy przykład wywołuje przepływ pracy składający się z jednego WriteLine działania, które nie ma żadnych argumentów wyjściowych.

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

WorkflowInvoker.Invoke(wf);

Uwagi

Ta metoda blokuje działanie do momentu ukończenia przepływu pracy, w tym czasu bezczynności. Całe wykonanie przepływu pracy jest gwarantowane do wykonania w wątku wywołującym. Aby skonfigurować interwał limitu czasu, w którym przepływ pracy musi zostać ukończony, użyj jednego z Invoke przeciążeń, które zajmują wartość TimeSpan.

Dotyczy

Invoke()

Wywołuje przepływ pracy synchronicznie przy użyciu definicji przepływu pracy przekazanej do konstruktora 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)

Zwraca

Słownik wartości i InOutArgument działań OutArgument głównych kluczy według nazwy argumentu reprezentujące dane wyjściowe przepływu pracy.

Przykłady

Poniższy przykład wywołuje przepływ pracy składający się z jednego DiceRoll działania. Działanie DiceRoll ma dwa argumenty wyjściowe reprezentujące wyniki operacji rzutowania kostką. Gdy wywołanie funkcji Invoke zwraca, każdy argument wyjściowy jest zwracany w słowniku danych wyjściowych, kluczem według nazwy argumentu. Przepływ pracy jest wywoływany dwa razy, używając definicji przepływu pracy przekazanej do konstruktora 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"]);

Jeśli działanie główne przepływu pracy nie ma argumentów wyjściowych lub nie są one wymagane przez hosta, można je zignorować. Poniższy przykład wywołuje przepływ pracy składający się z jednego WriteLine działania, które nie ma żadnych argumentów wyjściowych.

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

WorkflowInvoker invoker = new WorkflowInvoker(wf);

invoker.Invoke();

Uwagi

Ta metoda blokuje działanie do momentu ukończenia przepływu pracy, w tym czasu bezczynności. Całe wykonanie przepływu pracy jest gwarantowane do wykonania w wątku wywołującym. Aby skonfigurować interwał limitu czasu, w którym przepływ pracy musi zostać ukończony, użyj jednego z Invoke przeciążeń, które zajmują wartość TimeSpan.

Dotyczy

Invoke(TimeSpan)

Wywołuje przepływ pracy synchronicznie z określonym interwałem limitu czasu.

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)

Parametry

timeout
TimeSpan

Interwał, w którym przepływ pracy musi zostać zakończony przed przerwaniem i TimeoutException jest zgłaszany.

Zwraca

Słownik wartości i InOutArgument działań OutArgument głównych kluczy według nazwy argumentu reprezentujące dane wyjściowe przepływu pracy.

Przykłady

Poniższy przykład wywołuje przepływ pracy, który zawiera dwa WriteLine działania i Delay działanie skonfigurowane z minutą Duration . Ten przepływ pracy jest wywoływany dwa razy; po raz pierwszy z interwałem limitu czasu wynoszącym dwie minuty, a drugi z interwałem limitu czasu wynoszącym 30 sekund. Pierwszy przepływ pracy zostanie ukończony pomyślnie, ale drugi nie i TimeoutException zostanie zgłoszony, a zostanie wyświetlony następujący komunikat.

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

Aby zapoznać się z przykładem użycia Invoke argumentów wyjściowych, zobacz przeciążenie Invoke z tymi samymi parametrami co to przeciążenie bez interwału limitu czasu.

Uwagi

Ta metoda blokuje działanie do momentu ukończenia przepływu pracy, w tym czasu bezczynności. Całe wykonanie przepływu pracy jest gwarantowane do wykonania w wątku wywołującym. Jeśli przepływ pracy nie zostanie ukończony w określonym interwale limitu czasu, przepływ pracy zostanie przerwany i TimeoutException zostanie zgłoszony.

Uwaga

Parametr TimeoutException jest zgłaszany tylko wtedy, gdy upłynie interwał limitu czasu, a przepływ pracy stanie się bezczynny podczas wykonywania. Przepływ pracy, który trwa dłużej niż określony interwał przekroczenia limitu czasu, zostanie ukończony pomyślnie, jeśli przepływ pracy nie stanie się bezczynny.

Dotyczy

Invoke<TResult>(Activity<TResult>)

Wywołuje przepływ pracy synchronicznie przy użyciu definicji przepływu pracy przekazanej do konstruktora 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

Parametry typu

TResult

Typ przepływu pracy.

Parametry

workflow
Activity<TResult>

Definicja przepływu pracy przepływu pracy do wywołania. Definicja przepływu pracy musi pochodzić z elementu ActivityWithResult.

Zwraca

TResult

Wartość typu TResult z wynikiem wykonania działania.

Przykłady

Poniższy przykład wywołuje przepływ pracy składający się z jednego Add działania, które ma dwa argumenty wejściowe, a ponieważ pochodzi z CodeActivity<int> niego, ma jeden dobrze zdefiniowany Result argument wyjściowy. Po wywołaniu przepływu pracy słownik jest przekazywany, arguments który zawiera wartości dla każdego argumentu wejściowego, kluczem według nazwy argumentu. Gdy wywołanie metody Invoke zwraca wartość argumentu wyjściowego Result , jest zwracana.

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

Uwagi

Ta metoda blokuje działanie do momentu ukończenia przepływu pracy, w tym czasu bezczynności. Całe wykonanie przepływu pracy jest gwarantowane do wykonania w wątku wywołującym. Aby skonfigurować interwał limitu czasu, w którym przepływ pracy musi zostać ukończony, użyj jednego z Invoke przeciążeń, które zajmują wartość TimeSpan.

Dotyczy

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

Wywołuje przepływ pracy synchronicznie przy użyciu określonej definicji przepływu pracy i IDictionary<TKey,TValue> parametrów wejściowych.

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

Parametry typu

TResult

Typ przepływu pracy.

Parametry

workflow
Activity<TResult>

Definicja przepływu pracy przepływu pracy do wywołania.

inputs
IDictionary<String,Object>

Słownik parametrów wejściowych przepływu pracy, do których kluczem jest nazwa argumentu.

Zwraca

TResult

Wartość typu TResult z wynikiem wykonania działania.

Przykłady

Poniższy przykład wywołuje przepływ pracy składający się z jednego Add działania, które ma dwa argumenty wejściowe, a ponieważ pochodzi z CodeActivity<int> niego, ma jeden dobrze zdefiniowany Result argument wyjściowy. Po wywołaniu przepływu pracy słownik jest przekazywany, arguments który zawiera wartości dla każdego argumentu wejściowego, kluczem według nazwy argumentu. Gdy wywołanie metody Invoke zwraca wartość argumentu wyjściowego Result , jest zwracana.

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

Uwagi

Ta metoda blokuje działanie do momentu ukończenia przepływu pracy, w tym czasu bezczynności. Całe wykonanie przepływu pracy jest gwarantowane do wykonania w wątku wywołującym. Aby skonfigurować interwał limitu czasu, w którym przepływ pracy musi zostać ukończony, użyj jednego z Invoke przeciążeń, które zajmują wartość TimeSpan.

Uwaga

Parametr TimeoutException jest zgłaszany tylko wtedy, gdy upłynie interwał limitu czasu, a przepływ pracy stanie się bezczynny podczas wykonywania. Przepływ pracy, który trwa dłużej niż określony interwał limitu czasu, zostanie ukończony pomyślnie, jeśli przepływ pracy nie stanie się bezczynny.

Dotyczy

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

Wywołuje przepływ pracy synchronicznie przy użyciu określonej definicji przepływu pracy, IDictionary<TKey,TValue> parametrów wejściowych i interwału limitu czasu.

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

Parametry typu

TResult

Typ przepływu pracy.

Parametry

workflow
Activity<TResult>

Definicja przepływu pracy przepływu pracy do wywołania.

inputs
IDictionary<String,Object>

Słownik parametrów wejściowych przepływu pracy, do których kluczem jest nazwa argumentu.

timeout
TimeSpan

Interwał, w którym przepływ pracy musi zostać zakończony przed przerwaniem i TimeoutException jest zgłaszany.

Zwraca

TResult

Wartość typu TResult z wynikiem wykonania działania.

Przykłady

Poniższy przykład wywołuje przepływ pracy składający się z jednego Add działania, które ma dwa argumenty wejściowe, a ponieważ pochodzi z CodeActivity<int> niego, ma jeden dobrze zdefiniowany Result argument wyjściowy. Po wywołaniu przepływu pracy słownik jest przekazywany, arguments który zawiera wartości dla każdego argumentu wejściowego, kluczem według nazwy argumentu. Gdy wywołanie metody Invoke zwraca wartość argumentu wyjściowego Result , jest zwracana.

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

Uwagi

Ta metoda blokuje działanie do momentu ukończenia przepływu pracy, w tym czasu bezczynności. Całe wykonanie przepływu pracy jest gwarantowane do wykonania w wątku wywołującym. Jeśli przepływ pracy nie zostanie ukończony w określonym interwale limitu czasu, przepływ pracy zostanie przerwany i TimeoutException zostanie zgłoszony.

Uwaga

Parametr TimeoutException jest zgłaszany tylko wtedy, gdy upłynie interwał limitu czasu, a przepływ pracy stanie się bezczynny podczas wykonywania. Przepływ pracy, który trwa dłużej niż określony interwał limitu czasu, zostanie ukończony pomyślnie, jeśli przepływ pracy nie stanie się bezczynny.

Dotyczy

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

Wywołuje przepływ pracy synchronicznie przy użyciu określonej definicji przepływu pracy, IDictionary<TKey,TValue> parametrów wejściowych, IDictionary<TKey,TValue> dodatkowych parametrów wyjściowych i interwału limitu czasu.

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

Parametry typu

TResult

Typ przepływu pracy.

Parametry

workflow
Activity<TResult>

Definicja przepływu pracy przepływu pracy do wywołania.

inputs
IDictionary<String,Object>

Słownik parametrów wejściowych przepływu pracy, do których kluczem jest nazwa argumentu.

additionalOutputs
IDictionary<String,Object>

Słownik dodatkowych parametrów wyjściowych przepływu pracy, do których kluczem jest nazwa argumentu.

timeout
TimeSpan

Interwał, w którym przepływ pracy musi zostać zakończony przed przerwaniem i TimeoutException jest zgłaszany.

Zwraca

TResult

Wartość typu TResult z wynikiem wykonania działania.

Przykłady

Poniższy przykład wywołuje przepływ pracy składający się z jednego Add działania, które ma dwa argumenty wejściowe, a ponieważ pochodzi z CodeActivity<int> niego, ma jeden dobrze zdefiniowany Result argument wyjściowy. Po wywołaniu przepływu pracy słownik jest przekazywany, arguments który zawiera wartości dla każdego argumentu wejściowego, kluczem według nazwy argumentu. Gdy wywołanie metody Invoke zwraca wartość argumentu wyjściowego Result , jest zwracana.

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

Uwagi

Ta metoda blokuje działanie do momentu ukończenia przepływu pracy, w tym czasu bezczynności. Całe wykonanie przepływu pracy jest gwarantowane do wykonania w wątku wywołującym. Jeśli przepływ pracy nie zostanie ukończony w określonym interwale limitu czasu, przepływ pracy zostanie przerwany i TimeoutException zostanie zgłoszony.

Uwaga

Parametr TimeoutException jest zgłaszany tylko wtedy, gdy upłynie interwał limitu czasu, a przepływ pracy stanie się bezczynny podczas wykonywania. Przepływ pracy, który trwa dłużej niż określony interwał limitu czasu, zostanie ukończony pomyślnie, jeśli przepływ pracy nie stanie się bezczynny.

Dotyczy