Bagikan melalui


WorkflowInvoker.Invoke Metode

Definisi

Memanggil alur kerja secara sinkron dan mengembalikan kamus aktivitas OutArgument akar dan InOutArgument nilai yang dikunci oleh nama argumen yang mewakili output alur kerja.

Overload

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

Memanggil alur kerja secara sinkron menggunakan definisi alur kerja yang ditentukan, IDictionary<TKey,TValue> parameter input, dan interval waktu habis.

Invoke(Activity, TimeSpan)

Memanggil alur kerja secara sinkron menggunakan definisi alur kerja yang ditentukan dan interval waktu habis.

Invoke(Activity, IDictionary<String,Object>)

Memanggil alur kerja secara sinkron menggunakan definisi alur kerja yang ditentukan dan IDictionary<TKey,TValue> parameter input.

Invoke(IDictionary<String,Object>, TimeSpan)

Memanggil aktivitas yang diteruskan ke WorkflowInvoker(Activity) konstruktor secara sinkron dengan parameter input yang ditentukan IDictionary<TKey,TValue> dan interval waktu habis yang ditentukan.

Invoke(IDictionary<String,Object>)

Memanggil aktivitas yang diteruskan ke WorkflowInvoker(Activity) konstruktor secara sinkron dengan parameter input yang ditentukan IDictionary<TKey,TValue> .

Invoke(Activity)

Memanggil alur kerja secara sinkron menggunakan definisi alur kerja yang ditentukan.

Invoke()

Memanggil alur kerja secara sinkron menggunakan definisi alur kerja yang diteruskan ke WorkflowInvoker(Activity) konstruktor.

Invoke(TimeSpan)

Memanggil alur kerja secara sinkron dengan interval waktu habis yang ditentukan.

Invoke<TResult>(Activity<TResult>)

Memanggil alur kerja secara sinkron menggunakan definisi alur kerja yang diteruskan ke WorkflowInvoker(Activity) konstruktor.

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

Memanggil alur kerja secara sinkron menggunakan definisi alur kerja yang ditentukan dan IDictionary<TKey,TValue> parameter input.

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

Memanggil alur kerja secara sinkron menggunakan definisi alur kerja yang ditentukan, IDictionary<TKey,TValue> parameter input, dan interval waktu habis.

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

Memanggil alur kerja secara sinkron menggunakan definisi alur kerja yang ditentukan, IDictionary<TKey,TValue> parameter input, IDictionary<TKey,TValue> parameter output tambahan, dan interval waktu habis.

Keterangan

Metode ini memblokir hingga alur kerja selesai, termasuk waktu menganggur. Semua eksekusi alur kerja dijamin akan dijalankan pada utas pemanggilan. Untuk mengonfigurasi interval waktu habis di mana alur kerja harus selesai, gunakan salah Invoke satu kelebihan beban yang mengambil TimeSpan.

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

Memanggil alur kerja secara sinkron menggunakan definisi alur kerja yang ditentukan, IDictionary<TKey,TValue> parameter input, dan interval waktu habis.

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

Definisi alur kerja dari alur kerja yang akan dipanggil.

inputs
IDictionary<String,Object>

Kamus parameter input ke alur kerja, di-keyed by argument name.

timeout
TimeSpan

Interval di mana alur kerja harus selesai sebelum dibatalkan dan TimeoutException dilemparkan.

Mengembalikan

Kamus aktivitas OutArgument akar dan InOutArgument nilai yang dikuntah oleh nama argumen yang mewakili output alur kerja.

Contoh

Contoh berikut memanggil alur kerja yang berisi dua WriteLine aktivitas dan aktivitas yang Delay dikonfigurasi dengan Duration satu menit. Alur kerja ini dipanggil dua kali; pertama kali dengan interval waktu habis dua menit, dan kedua kalinya dengan interval waktu habis 30 detik. Alur kerja pertama berhasil diselesaikan, tetapi yang kedua tidak dan dilemparkan 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);
}

Untuk contoh penggunaan Invoke dengan argumen input dan output, lihat kelebihan beban Invoke dengan parameter yang sama dengan kelebihan beban ini tanpa interval waktu habis.

Keterangan

Metode ini memblokir hingga alur kerja selesai, termasuk waktu menganggur. Semua eksekusi alur kerja dijamin akan dijalankan pada utas pemanggilan. Jika alur kerja tidak selesai dalam interval waktu habis yang ditentukan, alur kerja dibatalkan dan TimeoutException dilemparkan.

Catatan

TimeoutException hanya ditampilkan jika interval waktu habis dan alur kerja menjadi tidak aktif selama eksekusi. Alur kerja yang membutuhkan waktu lebih lama dari interval waktu habis yang ditentukan untuk diselesaikan dengan sukses jika alur kerja tidak menjadi diam.

Berlaku untuk

Invoke(Activity, TimeSpan)

Memanggil alur kerja secara sinkron menggunakan definisi alur kerja yang ditentukan dan interval waktu habis.

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

Definisi alur kerja dari alur kerja yang akan dipanggil.

timeout
TimeSpan

Interval di mana alur kerja harus selesai sebelum dibatalkan dan TimeoutException dilemparkan.

Mengembalikan

Kamus aktivitas OutArgument akar dan InOutArgument nilai yang dikuntah oleh nama argumen yang mewakili output alur kerja.

Contoh

Contoh berikut memanggil alur kerja yang berisi dua WriteLine aktivitas dan aktivitas yang Delay dikonfigurasi dengan Duration satu menit. Alur kerja ini dipanggil dua kali; pertama kali dengan interval waktu habis dua menit, dan kedua kalinya dengan interval waktu habis 30 detik. Alur kerja pertama berhasil diselesaikan, tetapi yang kedua tidak dan dilemparkan 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);
}

Untuk contoh penggunaan Invoke dengan argumen output, lihat kelebihan beban Invoke dengan parameter yang sama dengan kelebihan beban ini tanpa interval waktu habis.

Keterangan

Metode ini memblokir hingga alur kerja selesai, termasuk waktu menganggur. Semua eksekusi alur kerja dijamin akan dijalankan pada utas pemanggilan. Jika alur kerja tidak selesai dalam interval waktu habis yang ditentukan, alur kerja dibatalkan dan TimeoutException dilemparkan.

Catatan

TimeoutException hanya ditampilkan jika interval waktu habis dan alur kerja menjadi tidak aktif selama eksekusi. Alur kerja yang membutuhkan waktu lebih lama dari interval waktu habis yang ditentukan untuk diselesaikan dengan sukses jika alur kerja tidak menjadi diam.

Berlaku untuk

Invoke(Activity, IDictionary<String,Object>)

Memanggil alur kerja secara sinkron menggunakan definisi alur kerja yang ditentukan dan IDictionary<TKey,TValue> parameter input.

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

Definisi alur kerja dari alur kerja yang akan dipanggil.

inputs
IDictionary<String,Object>

Kamus parameter input ke alur kerja, di-keyed by argument name.

Mengembalikan

Kamus aktivitas OutArgument akar dan InOutArgument nilai yang dikuntah oleh nama argumen yang mewakili output alur kerja.

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari aktivitas Divide tunggal yang memiliki dua argumen input dan dua argumen output. Saat alur kerja dipanggil, kamus arguments diteruskan yang berisi nilai untuk setiap argumen input, dikunci dengan nama argumen. Saat panggilan ke Invoke kembali, setiap argumen output dikembalikan dalam kamus outputs, juga dikunci dengan nama argumen.

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

Jika alur kerja berasal dari ActivityWithResult, seperti CodeActivity<TResult> atau Activity<TResult>, dan ada argumen output selain argumen output yang ditentukan Result dengan baik, kelebihan beban Invokenon-generik dari , seperti ini, harus digunakan untuk mengambil argumen tambahan. Untuk melakukannya, definisi alur kerja yang diteruskan ke Invoke harus berjenis Activity. Dalam contoh Divide ini aktivitas berasal dari CodeActivity<int>, tetapi dinyatakan sebagai Activity sehingga kelebihan beban Invoke, yang mengembalikan kamus argumen alih-alih nilai pengembalian tunggal, digunakan.

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

Keterangan

Metode ini memblokir hingga alur kerja selesai, termasuk waktu menganggur. Semua eksekusi alur kerja dijamin akan dijalankan pada utas pemanggilan. Untuk mengonfigurasi interval waktu habis di mana alur kerja harus selesai, gunakan salah Invoke satu kelebihan beban yang mengambil TimeSpan.

Berlaku untuk

Invoke(IDictionary<String,Object>, TimeSpan)

Memanggil aktivitas yang diteruskan ke WorkflowInvoker(Activity) konstruktor secara sinkron dengan parameter input yang ditentukan IDictionary<TKey,TValue> dan interval waktu habis yang ditentukan.

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>

Kamus parameter input ke alur kerja, di-keyed by argument name.

timeout
TimeSpan

Interval di mana alur kerja harus selesai sebelum dibatalkan dan TimeoutException dilemparkan.

Mengembalikan

Kamus aktivitas OutArgument akar dan InOutArgument nilai yang dikuntah oleh nama argumen yang mewakili output alur kerja.

Contoh

Contoh berikut memanggil alur kerja yang berisi dua WriteLine aktivitas dan aktivitas yang Delay dikonfigurasi dengan Duration satu menit. Alur kerja ini dipanggil dua kali; pertama kali dengan interval waktu habis dua menit, dan kedua kalinya dengan interval waktu habis 30 detik. Alur kerja pertama berhasil diselesaikan, tetapi yang kedua tidak dan TimeoutException dilemparkan dan pesan berikut ditampilkan.

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

Untuk contoh penggunaan Invoke dengan argumen input dan output, lihat kelebihan beban Invoke dengan parameter yang sama dengan kelebihan beban ini tanpa interval waktu habis.

Keterangan

Metode ini memblokir hingga alur kerja selesai, termasuk waktu menganggur. Semua eksekusi alur kerja dijamin akan dijalankan pada utas pemanggilan. Jika alur kerja tidak selesai dalam interval waktu habis yang ditentukan, alur kerja dibatalkan dan TimeoutException dilemparkan.

Catatan

TimeoutException hanya ditampilkan jika interval waktu habis dan alur kerja menjadi tidak aktif selama eksekusi. Alur kerja yang membutuhkan waktu lebih lama dari interval waktu habis yang ditentukan untuk diselesaikan dengan sukses jika alur kerja tidak menjadi diam.

Berlaku untuk

Invoke(IDictionary<String,Object>)

Memanggil aktivitas yang diteruskan ke WorkflowInvoker(Activity) konstruktor secara sinkron dengan parameter input yang ditentukan 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)

Parameter

inputs
IDictionary<String,Object>

Kamus parameter input ke alur kerja, di-keyed by argument name.

Mengembalikan

Kamus aktivitas OutArgument akar dan InOutArgument nilai yang dikuntah oleh nama argumen yang mewakili output alur kerja.

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari aktivitas Divide tunggal yang memiliki dua argumen input dan dua argumen output. Saat alur kerja dipanggil, kamus arguments diteruskan yang berisi nilai untuk setiap argumen input, dikunci dengan nama argumen. Saat panggilan ke Invoke kembali, setiap argumen output dikembalikan dalam kamus outputs, juga dikunci dengan nama argumen.

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

Jika alur kerja berasal dari ActivityWithResult, seperti CodeActivity<TResult> atau Activity<TResult>, dan ada argumen output selain argumen output yang ditentukan Result dengan baik, kelebihan beban Invokenon-generik dari , seperti ini, harus digunakan untuk mengambil argumen tambahan. Untuk melakukan ini, definisi alur kerja yang diteruskan ke WorkflowInvoker konstruktor harus berjenis Activity. Dalam contoh Divide ini aktivitas berasal dari CodeActivity<int>, tetapi dinyatakan sebagai Activity sehingga kelebihan beban Invoke, yang mengembalikan kamus argumen alih-alih nilai pengembalian tunggal, digunakan.

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

Keterangan

Metode ini memblokir hingga alur kerja selesai, termasuk waktu menganggur. Semua eksekusi alur kerja dijamin akan dijalankan pada utas pemanggilan. Untuk mengonfigurasi interval waktu habis di mana alur kerja harus selesai, gunakan salah Invoke satu kelebihan beban yang mengambil TimeSpan.

Berlaku untuk

Invoke(Activity)

Memanggil alur kerja secara sinkron menggunakan definisi alur kerja yang ditentukan.

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

Definisi alur kerja dari alur kerja yang akan dipanggil.

Mengembalikan

Kamus aktivitas OutArgument akar dan InOutArgument nilai yang dikuntah oleh nama argumen yang mewakili output alur kerja.

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari satu DiceRoll aktivitas. Aktivitas DiceRoll memiliki dua argumen output yang mewakili hasil operasi pelemparan dadu. Ketika panggilan ke Invoke kembali, setiap argumen output dikembalikan dalam kamus output, dikuntangani oleh nama argumen.

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

Jika aktivitas akar alur kerja tidak memiliki argumen output atau tidak diperlukan oleh host, mereka dapat diabaikan. Contoh berikut memanggil alur kerja yang terdiri dari satu WriteLine aktivitas yang tidak memiliki argumen output apa pun.

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

WorkflowInvoker.Invoke(wf);

Keterangan

Metode ini memblokir hingga alur kerja selesai, termasuk waktu menganggur. Semua eksekusi alur kerja dijamin akan dijalankan pada utas pemanggilan. Untuk mengonfigurasi interval waktu habis di mana alur kerja harus selesai, gunakan salah Invoke satu kelebihan beban yang mengambil TimeSpan.

Berlaku untuk

Invoke()

Memanggil alur kerja secara sinkron menggunakan definisi alur kerja yang diteruskan ke WorkflowInvoker(Activity) konstruktor.

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)

Mengembalikan

Kamus aktivitas OutArgument akar dan InOutArgument nilai yang dikuntah oleh nama argumen yang mewakili output alur kerja.

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari satu DiceRoll aktivitas. Aktivitas DiceRoll memiliki dua argumen output yang mewakili hasil operasi pelemparan dadu. Ketika panggilan ke Invoke kembali, setiap argumen output dikembalikan dalam kamus output, dikuntangani oleh nama argumen. Alur kerja dipanggil dua kali, menggunakan definisi alur kerja yang diteruskan ke WorkflowInvoker konstruktor.

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

Jika aktivitas akar alur kerja tidak memiliki argumen output atau tidak diperlukan oleh host, mereka dapat diabaikan. Contoh berikut memanggil alur kerja yang terdiri dari satu WriteLine aktivitas yang tidak memiliki argumen output apa pun.

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

WorkflowInvoker invoker = new WorkflowInvoker(wf);

invoker.Invoke();

Keterangan

Metode ini memblokir hingga alur kerja selesai, termasuk waktu menganggur. Semua eksekusi alur kerja dijamin akan dijalankan pada utas pemanggilan. Untuk mengonfigurasi interval waktu habis di mana alur kerja harus selesai, gunakan salah Invoke satu kelebihan beban yang mengambil TimeSpan.

Berlaku untuk

Invoke(TimeSpan)

Memanggil alur kerja secara sinkron dengan interval waktu habis yang ditentukan.

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

Interval di mana alur kerja harus selesai sebelum dibatalkan dan TimeoutException dilemparkan.

Mengembalikan

Kamus aktivitas OutArgument akar dan InOutArgument nilai yang dikuntah oleh nama argumen yang mewakili output alur kerja.

Contoh

Contoh berikut memanggil alur kerja yang berisi dua WriteLine aktivitas dan aktivitas yang Delay dikonfigurasi dengan Duration satu menit. Alur kerja ini dipanggil dua kali; pertama kali dengan interval waktu habis dua menit, dan kedua kalinya dengan interval waktu habis 30 detik. Alur kerja pertama berhasil diselesaikan, tetapi yang kedua tidak dan TimeoutException dilemparkan dan pesan berikut ditampilkan.

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

Untuk contoh penggunaan Invoke dengan argumen output, lihat kelebihan beban Invoke dengan parameter yang sama dengan kelebihan beban ini tanpa interval waktu habis.

Keterangan

Metode ini memblokir hingga alur kerja selesai, termasuk waktu menganggur. Semua eksekusi alur kerja dijamin akan dijalankan pada utas pemanggilan. Jika alur kerja tidak selesai dalam interval waktu habis yang ditentukan, alur kerja dibatalkan dan TimeoutException dilemparkan.

Catatan

TimeoutException hanya ditampilkan jika interval waktu habis dan alur kerja menjadi tidak aktif selama eksekusi. Alur kerja yang membutuhkan waktu lebih lama dari interval waktu habis yang ditentukan untuk diselesaikan dengan sukses jika alur kerja tidak menjadi diam.

Berlaku untuk

Invoke<TResult>(Activity<TResult>)

Memanggil alur kerja secara sinkron menggunakan definisi alur kerja yang diteruskan ke WorkflowInvoker(Activity) konstruktor.

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

Jenis parameter

TResult

Jenis alur kerja.

Parameter

workflow
Activity<TResult>

Definisi alur kerja dari alur kerja yang akan dipanggil. Definisi alur kerja perlu berasal dari ActivityWithResult.

Mengembalikan

TResult

Nilai jenis TResult dengan hasil eksekusi aktivitas.

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari satu Add aktivitas yang memiliki dua argumen input dan karena berasal darinya CodeActivity<int> memiliki satu argumen output yang terdefinisi Result dengan baik. Saat alur kerja dipanggil, kamus arguments diteruskan yang berisi nilai untuk setiap argumen input, dikunci dengan nama argumen. Saat panggilan untuk Invoke kembali, nilai Result argumen output dikembalikan.

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

Keterangan

Metode ini memblokir hingga alur kerja selesai, termasuk waktu menganggur. Semua eksekusi alur kerja dijamin akan dijalankan pada utas pemanggilan. Untuk mengonfigurasi interval waktu habis di mana alur kerja harus selesai, gunakan salah Invoke satu kelebihan beban yang mengambil TimeSpan.

Berlaku untuk

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

Memanggil alur kerja secara sinkron menggunakan definisi alur kerja yang ditentukan dan IDictionary<TKey,TValue> parameter input.

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

Jenis parameter

TResult

Jenis alur kerja.

Parameter

workflow
Activity<TResult>

Definisi alur kerja dari alur kerja yang akan dipanggil.

inputs
IDictionary<String,Object>

Kamus parameter input ke alur kerja, di-keyed by argument name.

Mengembalikan

TResult

Nilai jenis TResult dengan hasil eksekusi aktivitas.

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari satu Add aktivitas yang memiliki dua argumen input dan karena berasal darinya CodeActivity<int> memiliki satu argumen output yang terdefinisi Result dengan baik. Saat alur kerja dipanggil, kamus arguments diteruskan yang berisi nilai untuk setiap argumen input, dikunci dengan nama argumen. Saat panggilan untuk Invoke kembali, nilai Result argumen output dikembalikan.

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

Keterangan

Metode ini memblokir hingga alur kerja selesai, termasuk waktu menganggur. Semua eksekusi alur kerja dijamin akan dijalankan pada utas pemanggilan. Untuk mengonfigurasi interval waktu habis di mana alur kerja harus selesai, gunakan salah Invoke satu kelebihan beban yang mengambil TimeSpan.

Catatan

TimeoutException hanya ditampilkan jika interval waktu habis dan alur kerja menjadi tidak aktif selama eksekusi. Alur kerja yang membutuhkan waktu lebih lama dari interval waktu habis yang ditentukan untuk diselesaikan, berhasil diselesaikan jika alur kerja tidak menjadi menganggur.

Berlaku untuk

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

Memanggil alur kerja secara sinkron menggunakan definisi alur kerja yang ditentukan, IDictionary<TKey,TValue> parameter input, dan interval waktu habis.

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

Jenis parameter

TResult

Jenis alur kerja.

Parameter

workflow
Activity<TResult>

Definisi alur kerja dari alur kerja yang akan dipanggil.

inputs
IDictionary<String,Object>

Kamus parameter input ke alur kerja, di-keyed by argument name.

timeout
TimeSpan

Interval di mana alur kerja harus selesai sebelum dibatalkan dan TimeoutException dilemparkan.

Mengembalikan

TResult

Nilai jenis TResult dengan hasil eksekusi aktivitas.

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari satu Add aktivitas yang memiliki dua argumen input dan karena berasal darinya CodeActivity<int> memiliki satu argumen output yang terdefinisi Result dengan baik. Saat alur kerja dipanggil, kamus arguments diteruskan yang berisi nilai untuk setiap argumen input, dikunci dengan nama argumen. Saat panggilan untuk Invoke kembali, nilai Result argumen output dikembalikan.

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

Keterangan

Metode ini memblokir hingga alur kerja selesai, termasuk waktu menganggur. Semua eksekusi alur kerja dijamin akan dijalankan pada utas pemanggilan. Jika alur kerja tidak selesai dalam interval waktu habis yang ditentukan, alur kerja dibatalkan dan TimeoutException dilemparkan.

Catatan

TimeoutException hanya ditampilkan jika interval waktu habis dan alur kerja menjadi tidak aktif selama eksekusi. Alur kerja yang membutuhkan waktu lebih lama dari interval waktu habis yang ditentukan untuk diselesaikan, berhasil diselesaikan jika alur kerja tidak menjadi menganggur.

Berlaku untuk

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

Memanggil alur kerja secara sinkron menggunakan definisi alur kerja yang ditentukan, IDictionary<TKey,TValue> parameter input, IDictionary<TKey,TValue> parameter output tambahan, dan interval waktu habis.

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

Jenis parameter

TResult

Jenis alur kerja.

Parameter

workflow
Activity<TResult>

Definisi alur kerja dari alur kerja yang akan dipanggil.

inputs
IDictionary<String,Object>

Kamus parameter input ke alur kerja, di-keyed by argument name.

additionalOutputs
IDictionary<String,Object>

Kamus parameter output tambahan dari alur kerja, yang di-key oleh nama argumen.

timeout
TimeSpan

Interval di mana alur kerja harus selesai sebelum dibatalkan dan TimeoutException dilemparkan.

Mengembalikan

TResult

Nilai jenis TResult dengan hasil eksekusi aktivitas.

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari satu Add aktivitas yang memiliki dua argumen input dan karena berasal darinya CodeActivity<int> memiliki satu argumen output yang terdefinisi Result dengan baik. Saat alur kerja dipanggil, kamus arguments diteruskan yang berisi nilai untuk setiap argumen input, dikunci dengan nama argumen. Saat panggilan untuk Invoke kembali, nilai Result argumen output dikembalikan.

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

Keterangan

Metode ini memblokir hingga alur kerja selesai, termasuk waktu menganggur. Semua eksekusi alur kerja dijamin akan dijalankan pada utas pemanggilan. Jika alur kerja tidak selesai dalam interval waktu habis yang ditentukan, alur kerja dibatalkan dan TimeoutException dilemparkan.

Catatan

TimeoutException hanya ditampilkan jika interval waktu habis dan alur kerja menjadi tidak aktif selama eksekusi. Alur kerja yang membutuhkan waktu lebih lama dari interval waktu habis yang ditentukan untuk diselesaikan, berhasil diselesaikan jika alur kerja tidak menjadi menganggur.

Berlaku untuk