Bagikan melalui


WorkflowInvoker.InvokeAsync Metode

Definisi

Memanggil alur kerja secara asinkron menggunakan pola desain asinkron berbasis peristiwa.

Overload

InvokeAsync(TimeSpan, Object)

Memanggil alur kerja secara asinkron dengan interval waktu habis yang ditentukan dan pengidentifikasi unik.

InvokeAsync(IDictionary<String,Object>, TimeSpan)

Memanggil alur kerja secara asinkron dengan parameter input yang ditentukan IDictionary<TKey,TValue> dan interval waktu habis yang ditentukan.

InvokeAsync(IDictionary<String,Object>, Object)

Memanggil alur kerja secara asinkron menggunakan parameter input yang ditentukan IDictionary<TKey,TValue> dan pengidentifikasi unik.

InvokeAsync()

Memanggil alur kerja secara asinkron.

InvokeAsync(Object)

Memanggil alur kerja secara asinkron menggunakan pengidentifikasi unik yang ditentukan.

InvokeAsync(IDictionary<String,Object>)

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

InvokeAsync(IDictionary<String,Object>, TimeSpan, Object)

Memanggil alur kerja secara asinkron dengan parameter input yang ditentukan IDictionary<TKey,TValue> , interval waktu habis yang ditentukan, dan pengidentifikasi unik.

InvokeAsync(TimeSpan)

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

Keterangan

Untuk diberi tahu ketika alur kerja selesai, tangani InvokeCompleted. Untuk mengonfigurasi interval waktu habis di mana alur kerja harus diselesaikan, gunakan salah InvokeAsync satu kelebihan beban yang mengambil TimeSpan.

Metode ini memanggil alur kerja secara asinkron menggunakan pola desain asinkron berbasis peristiwa. Untuk informasi selengkapnya, lihat Gambaran Umum Pola Asinkron Berbasis Peristiwa.

InvokeAsync(TimeSpan, Object)

Memanggil alur kerja secara asinkron dengan interval waktu habis yang ditentukan dan pengidentifikasi unik.

public:
 void InvokeAsync(TimeSpan timeout, System::Object ^ userState);
public void InvokeAsync (TimeSpan timeout, object userState);
member this.InvokeAsync : TimeSpan * obj -> unit
Public Sub InvokeAsync (timeout As TimeSpan, userState As Object)

Parameter

timeout
TimeSpan

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

userState
Object

Objek yang disediakan pengguna yang digunakan untuk membedakan operasi pemanggilan asinkron khusus ini dari operasi pemanggilan asinkron lainnya saat ini.

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari LongRunningDiceRoll aktivitas. Aktivitas LongRunningDiceRoll memiliki dua argumen output yang mewakili hasil operasi pelemparan dadu. Ketika alur kerja selesai, alur kerja diambil di InvokeCompleted handler.

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

Keterangan

Parameter userState harus unik di semua operasi yang sedang berjalan InvokeAsync untuk aktivitas saat ini. Jika userState tidak unik, maka ArgumentException akan dilemparkan. userState digunakan untuk mengidentifikasi alur kerja di InvokeCompleted, dan untuk membatalkan alur kerja menggunakan CancelAsync.

Untuk diberi tahu ketika alur kerja selesai, tangani InvokeCompleted. 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.

Metode ini memanggil alur kerja secara asinkron menggunakan pola desain asinkron berbasis peristiwa. Untuk informasi selengkapnya, lihat Gambaran Umum Pola Asinkron Berbasis Peristiwa.

Berlaku untuk

InvokeAsync(IDictionary<String,Object>, TimeSpan)

Memanggil alur kerja secara asinkron dengan parameter input yang ditentukan IDictionary<TKey,TValue> dan interval waktu habis yang ditentukan.

public:
 void InvokeAsync(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, TimeSpan timeout);
public void InvokeAsync (System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout);
member this.InvokeAsync : System.Collections.Generic.IDictionary<string, obj> * TimeSpan -> unit
Public Sub InvokeAsync (inputs As IDictionary(Of String, Object), timeout As TimeSpan)

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.

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari LongRunningDiceRoll aktivitas. Aktivitas LongRunningDiceRoll memiliki dua argumen output yang mewakili hasil operasi pelemparan dadu. Ketika alur kerja selesai, alur kerja diambil di InvokeCompleted handler.

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

Keterangan

Untuk diberi tahu ketika alur kerja selesai, tangani InvokeCompleted. 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.

Metode ini memanggil alur kerja secara asinkron menggunakan pola desain asinkron berbasis peristiwa. Untuk informasi selengkapnya, lihat Gambaran Umum Pola Asinkron Berbasis Peristiwa.

Metode ini disimpan dalam tugas yang mengembalikan semua pengecualian non-penggunaan yang dapat dilemparkan oleh rekan sinkron metode. Jika pengecualian disimpan ke dalam tugas yang dikembalikan, pengecualian tersebut akan dilemparkan saat tugas ditunggu. Pengecualian penggunaan, seperti ArgumentException, masih dilemparkan secara sinkron. Untuk pengecualian yang disimpan, lihat pengecualian yang dilemparkan oleh Invoke(IDictionary<String,Object>, TimeSpan).

Berlaku untuk

InvokeAsync(IDictionary<String,Object>, Object)

Memanggil alur kerja secara asinkron menggunakan parameter input yang ditentukan IDictionary<TKey,TValue> dan pengidentifikasi unik.

public:
 void InvokeAsync(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, System::Object ^ userState);
public void InvokeAsync (System.Collections.Generic.IDictionary<string,object> inputs, object userState);
member this.InvokeAsync : System.Collections.Generic.IDictionary<string, obj> * obj -> unit
Public Sub InvokeAsync (inputs As IDictionary(Of String, Object), userState As Object)

Parameter

inputs
IDictionary<String,Object>

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

userState
Object

Objek yang disediakan pengguna yang digunakan untuk membedakan operasi pemanggilan asinkron khusus ini dari operasi pemanggilan asinkron lainnya saat ini.

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari LongRunningDiceRoll aktivitas. Aktivitas LongRunningDiceRoll memiliki dua argumen output yang mewakili hasil operasi pelemparan dadu. Ketika alur kerja selesai, alur kerja diambil di InvokeCompleted handler.

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

Keterangan

Parameter userState harus unik di semua operasi yang sedang berjalan InvokeAsync untuk aktivitas saat ini. Jika userState tidak unik, maka ArgumentException akan dilemparkan. userState digunakan untuk mengidentifikasi alur kerja di InvokeCompleted, dan untuk membatalkan alur kerja menggunakan CancelAsync.

Untuk diberi tahu ketika alur kerja selesai, tangani InvokeCompleted. Untuk mengonfigurasi interval waktu habis di mana alur kerja harus selesai, gunakan salah InvokeAsync satu kelebihan beban yang mengambil TimeSpan.

Metode ini memanggil alur kerja secara asinkron menggunakan pola desain asinkron berbasis peristiwa. Untuk informasi selengkapnya, lihat Gambaran Umum Pola Asinkron Berbasis Peristiwa.

Berlaku untuk

InvokeAsync()

Memanggil alur kerja secara asinkron.

public:
 void InvokeAsync();
public void InvokeAsync ();
member this.InvokeAsync : unit -> unit
Public Sub InvokeAsync ()

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari LongRunningDiceRoll aktivitas. Aktivitas LongRunningDiceRoll memiliki dua argumen output yang mewakili hasil operasi pelemparan dadu. Ketika alur kerja selesai, alur kerja diambil di InvokeCompleted handler.

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

Keterangan

Untuk diberi tahu ketika alur kerja selesai, tangani InvokeCompleted. Untuk mengonfigurasi interval waktu habis di mana alur kerja harus selesai, gunakan salah InvokeAsync satu kelebihan beban yang mengambil TimeSpan.

Metode ini memanggil alur kerja secara asinkron menggunakan pola desain asinkron berbasis peristiwa. Untuk informasi selengkapnya, lihat Gambaran Umum Pola Asinkron Berbasis Peristiwa.

Metode ini disimpan dalam tugas yang mengembalikan semua pengecualian non-penggunaan yang dapat dilemparkan oleh rekan sinkron metode. Jika pengecualian disimpan ke dalam tugas yang dikembalikan, pengecualian tersebut akan dilemparkan saat tugas ditunggu. Pengecualian penggunaan, seperti ArgumentException, masih dilemparkan secara sinkron. Untuk pengecualian yang disimpan, lihat pengecualian yang dilemparkan oleh Invoke().

Berlaku untuk

InvokeAsync(Object)

Memanggil alur kerja secara asinkron menggunakan pengidentifikasi unik yang ditentukan.

public:
 void InvokeAsync(System::Object ^ userState);
public void InvokeAsync (object userState);
member this.InvokeAsync : obj -> unit
Public Sub InvokeAsync (userState As Object)

Parameter

userState
Object

Objek yang disediakan pengguna yang digunakan untuk membedakan operasi pemanggilan asinkron khusus ini dari operasi pemanggilan asinkron lainnya saat ini.

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari LongRunningDiceRoll aktivitas. Aktivitas LongRunningDiceRoll memiliki dua argumen output yang mewakili hasil operasi pelemparan dadu. Ketika alur kerja selesai, alur kerja diambil di InvokeCompleted handler.

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

Keterangan

Parameter userState harus unik di semua operasi yang sedang berjalan InvokeAsync untuk aktivitas saat ini. userState Jika parameter tidak unik, parameter ArgumentException akan dilemparkan. userState digunakan untuk mengidentifikasi alur kerja di InvokeCompleted, dan untuk membatalkan alur kerja menggunakan CancelAsync.

Untuk diberi tahu ketika alur kerja selesai, tangani InvokeCompleted. Untuk mengonfigurasi interval waktu habis di mana alur kerja harus selesai, gunakan salah InvokeAsync satu kelebihan beban yang mengambil TimeSpan.

Metode ini memanggil alur kerja secara asinkron menggunakan pola desain asinkron berbasis peristiwa. Untuk informasi selengkapnya, lihat Gambaran Umum Pola Asinkron Berbasis Peristiwa.

Berlaku untuk

InvokeAsync(IDictionary<String,Object>)

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

public:
 void InvokeAsync(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs);
public void InvokeAsync (System.Collections.Generic.IDictionary<string,object> inputs);
member this.InvokeAsync : System.Collections.Generic.IDictionary<string, obj> -> unit
Public Sub InvokeAsync (inputs As IDictionary(Of String, Object))

Parameter

inputs
IDictionary<String,Object>

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

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari LongRunningDiceRoll aktivitas. Aktivitas LongRunningDiceRoll memiliki dua argumen output yang mewakili hasil operasi pelemparan dadu. Ketika alur kerja selesai, alur kerja diambil di InvokeCompleted handler.

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

Keterangan

Untuk diberi tahu ketika alur kerja selesai, tangani InvokeCompleted. Untuk mengonfigurasi interval waktu habis di mana alur kerja harus selesai, gunakan salah InvokeAsync satu kelebihan beban yang mengambil TimeSpan.

Metode ini memanggil alur kerja secara asinkron menggunakan pola desain asinkron berbasis peristiwa. Untuk informasi selengkapnya, lihat Gambaran Umum Pola Asinkron Berbasis Peristiwa.

Metode ini disimpan dalam tugas yang mengembalikan semua pengecualian non-penggunaan yang dapat dilemparkan oleh rekan sinkron metode. Jika pengecualian disimpan ke dalam tugas yang dikembalikan, pengecualian tersebut akan dilemparkan saat tugas ditunggu. Pengecualian penggunaan, seperti ArgumentException, masih dilemparkan secara sinkron. Untuk pengecualian yang disimpan, lihat pengecualian yang dilemparkan oleh Invoke(IDictionary<String,Object>).

Berlaku untuk

InvokeAsync(IDictionary<String,Object>, TimeSpan, Object)

Memanggil alur kerja secara asinkron dengan parameter input yang ditentukan IDictionary<TKey,TValue> , interval waktu habis yang ditentukan, dan pengidentifikasi unik.

public:
 void InvokeAsync(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, TimeSpan timeout, System::Object ^ userState);
public void InvokeAsync (System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout, object userState);
member this.InvokeAsync : System.Collections.Generic.IDictionary<string, obj> * TimeSpan * obj -> unit
Public Sub InvokeAsync (inputs As IDictionary(Of String, Object), timeout As TimeSpan, userState As 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 diselesaikan sebelum dibatalkan dan TimeoutException dilemparkan.

userState
Object

Objek yang disediakan pengguna yang digunakan untuk membedakan operasi pemanggilan asinkron khusus ini dari operasi pemanggilan asinkron lainnya saat ini.

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari LongRunningDiceRoll aktivitas. Aktivitas LongRunningDiceRoll memiliki dua argumen output yang mewakili hasil operasi pelemparan dadu. Ketika alur kerja selesai, ini diambil di InvokeCompleted handler.

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

Keterangan

Parameter userState harus unik di semua operasi yang saat ini berjalan InvokeAsync untuk aktivitas saat ini. Jika userState tidak unik, akan ArgumentException dilemparkan. userState digunakan untuk mengidentifikasi alur kerja di InvokeCompleted, dan untuk membatalkan alur kerja menggunakan CancelAsync.

Untuk diberi tahu ketika alur kerja selesai, tangani InvokeCompleted. 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.

Metode ini memanggil alur kerja secara asinkron menggunakan pola desain asinkron berbasis peristiwa. Untuk informasi selengkapnya, lihat Gambaran Umum Pola Asinkron Berbasis Peristiwa.

Berlaku untuk

InvokeAsync(TimeSpan)

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

public:
 void InvokeAsync(TimeSpan timeout);
public void InvokeAsync (TimeSpan timeout);
member this.InvokeAsync : TimeSpan -> unit
Public Sub InvokeAsync (timeout As TimeSpan)

Parameter

timeout
TimeSpan

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

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari LongRunningDiceRoll aktivitas. Aktivitas LongRunningDiceRoll memiliki dua argumen output yang mewakili hasil operasi pelemparan dadu. Ketika alur kerja selesai, ini diambil di InvokeCompleted handler.

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

Keterangan

Untuk diberi tahu ketika alur kerja selesai, tangani InvokeCompleted. 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.

Metode ini memanggil alur kerja secara asinkron menggunakan pola desain asinkron berbasis peristiwa. Untuk informasi selengkapnya, lihat Gambaran Umum Pola Asinkron Berbasis Peristiwa.

Metode ini disimpan dalam tugas yang menampilkan semua pengecualian non-penggunaan yang dapat dilemparkan oleh rekan sinkron metode. Jika pengecualian disimpan ke dalam tugas yang dikembalikan, pengecualian tersebut akan dilemparkan saat tugas ditunggu. Pengecualian penggunaan, seperti ArgumentException, masih dilemparkan secara sinkron. Untuk pengecualian yang disimpan, lihat pengecualian yang dilemparkan oleh Invoke(TimeSpan).

Berlaku untuk