WorkflowInvoker.InvokeAsync Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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).