WorkflowInvoker.InvokeAsync Metode

Definisi

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

Overload

Nama Deskripsi
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 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.

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 dilemparkan TimeoutException .

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 putar 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)
    {
        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 batas waktu yang ditentukan, alur kerja dibatalkan dan TimeoutException dilemparkan.

Note

Hanya TimeoutException dilemparkan jika interval waktu habis dan alur kerja menjadi tidak aktif selama eksekusi. Alur kerja yang membutuhkan waktu lebih lama dari interval batas waktu yang ditentukan akan selesai dengan sukses jika alur kerja tidak memasuki kondisi 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, dikodekan berdasarkan nama argumen.

timeout
TimeSpan

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

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari LongRunningDiceRoll aktivitas. Aktivitas LongRunningDiceRoll memiliki dua argumen output yang mewakili hasil operasi putar 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)
    {
        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 batas waktu yang ditentukan, alur kerja dibatalkan dan TimeoutException dilemparkan.

Note

Hanya TimeoutException dilemparkan jika interval waktu habis dan alur kerja menjadi tidak aktif selama eksekusi. Alur kerja yang membutuhkan waktu lebih lama dari interval batas waktu yang ditentukan akan selesai dengan sukses jika alur kerja tidak memasuki kondisi 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, dikodekan berdasarkan nama argumen.

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 putar 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)
    {
        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 putar 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)
    {
        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 putar 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)
    {
        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, dikodekan berdasarkan nama argumen.

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari LongRunningDiceRoll aktivitas. Aktivitas LongRunningDiceRoll memiliki dua argumen output yang mewakili hasil operasi putar 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)
    {
        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, dikodekan berdasarkan nama argumen.

timeout
TimeSpan

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

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 putar 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)
    {
        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 batas waktu yang ditentukan, alur kerja dibatalkan dan TimeoutException dilemparkan.

Note

Hanya TimeoutException dilemparkan jika interval waktu habis dan alur kerja menjadi tidak aktif selama eksekusi. Alur kerja yang membutuhkan waktu lebih lama dari interval batas waktu yang ditentukan akan selesai dengan sukses jika alur kerja tidak memasuki kondisi 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 selesai sebelum dibatalkan dan dilemparkan TimeoutException .

Contoh

Contoh berikut memanggil alur kerja yang terdiri dari LongRunningDiceRoll aktivitas. Aktivitas LongRunningDiceRoll memiliki dua argumen output yang mewakili hasil operasi putar 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)
    {
        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 batas waktu yang ditentukan, alur kerja dibatalkan dan TimeoutException dilemparkan.

Note

Hanya TimeoutException dilemparkan jika interval waktu habis dan alur kerja menjadi tidak aktif selama eksekusi. Alur kerja yang membutuhkan waktu lebih lama dari interval batas waktu yang ditentukan akan selesai dengan sukses jika alur kerja tidak memasuki kondisi 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(TimeSpan).

Berlaku untuk