Memudahkan Panggilan Kaedah Tidak Menyekat dalam C#
C# menawarkan beberapa cara untuk mencipta kaedah tidak menyekat—kaedah yang dilaksanakan secara tak segerak tanpa menghentikan utas utama. Walaupun atribut [OperationContract(IsOneWay = true)]
WCF menyediakan fungsi ini, ia boleh menjadi berlebihan untuk senario yang lebih mudah.
Pendekatan yang paling mudah digunakan ThreadPool.QueueUserWorkItem
. Kaedah ini menambahkan tugasan pada kumpulan benang dengan cekap, membolehkan pelaksanaan tak segerak.
Berikut ialah contoh ilustrasi:
<code class="language-csharp">class Foo { static void Main() { ThreadPool.QueueUserWorkItem(_ => FireAway()); //Asynchronous execution Console.WriteLine("Immediate execution"); } static void FireAway() { System.Threading.Thread.Sleep(5000); Console.WriteLine("Execution after 5 seconds"); } }</code>
Sebagai alternatif, versi C# 5.0 dan lebih baru menyediakan Task.Run
, menawarkan cara yang lebih moden dan ringkas untuk mencapai pelaksanaan tak segerak pada utas kumpulan benang:
<code class="language-csharp">Task.Run(() => FireAway());</code>
Kedua-dua ThreadPool.QueueUserWorkItem
dan Task.Run
menghalang utas utama daripada menyekat semasa pelaksanaan kaedah tak segerak.
Walau bagaimanapun, adalah penting untuk mempertimbangkan sama ada penyempurnaan kaedah itu penting sebelum kaedah Main
ditamatkan. Dalam persekitaran seperti ASP.NET, mekanisme tambahan mungkin diperlukan untuk menghalang penamatan pramatang operasi tak segerak.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membuat Panggilan Kaedah Tidak Menyekat dalam C# Sederhana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!