Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membuat Panggilan Kaedah Tidak Menyekat dalam C# Sederhana?

Bagaimanakah Saya Boleh Membuat Panggilan Kaedah Tidak Menyekat dalam C# Sederhana?

DDD
DDDasal
2025-01-18 15:46:08669semak imbas

How Can I Make Non-Blocking Method Calls in C# Simply?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn