Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah SemaphoreSlim dan Tasks Boleh Digunakan untuk Menguruskan Tugasan Serentak dengan Cekap?

Bagaimanakah SemaphoreSlim dan Tasks Boleh Digunakan untuk Menguruskan Tugasan Serentak dengan Cekap?

DDD
DDDasal
2024-12-31 10:53:09779semak imbas

How Can SemaphoreSlim and Tasks Be Used to Manage Concurrent Tasks Efficiently?

Menguruskan Tugasan Serentak dengan SemaphoreSlim dan Tugasan

Untuk mengendalikan senario dengan cekap di mana anda perlu mengehadkan bilangan tugasan yang dijalankan serentak, pertimbangkan untuk menggunakan gabungan SemaphoreSlim dan Tasks, pendekatan yang mematuhi amalan terbaik dan mengelakkan kemungkinan perangkap dikaitkan dengan ThreadPool.QueueUserWorkItem().

SemaphoreSlim untuk Mengehadkan Konkurensi:

SemaphoreSlim ialah alat yang berkuasa untuk mengawal konkurensi dalam .NET. Ia membolehkan anda menentukan bilangan maksimum token selamat benang (permit) yang boleh dipegang serentak. Ini adalah penting dalam senario kami, di mana kami ingin mengehadkan bilangan tugasan yang dijalankan pada bila-bila masa.

Tugas untuk Pelaksanaan Tugas:

Tugas mewakili operasi tak segerak yang boleh dijadualkan dan diuruskan secara bebas daripada urutan panggilan. Mereka menyediakan cara yang lebih fleksibel dan cekap untuk melaksanakan tugas berbanding dengan ThreadPool.QueueUserWorkItem().

Menggabungkan SemaphoreSlim dan Tugasan:

Untuk mencapai matlamat anda, ikuti langkah ini :

  1. Buat contoh SemaphoreSlim dengan bilangan maksimum tugasan serentak yang dikehendaki (10 dalam kes anda).
  2. Untuk setiap tugasan, cipta dan mulakan Tugasan baharu.
  3. Tambahkan kesinambungan pada setiap tugasan untuk mengeluarkan permit SemaphoreSlim apabila tugasan itu selesai.

Contoh Kod:

SemaphoreSlim maxThread = new SemaphoreSlim(10);

for (int i = 0; i < 115; i++)
{
    maxThread.Wait();
    Task.Factory.StartNew(() =>
    {
        // Your task code here
    }, TaskCreationOptions.LongRunning)
    .ContinueWith((task) => maxThread.Release());
}

Dalam contoh ini:

  • maxThread ialah contoh SemaphoreSlim yang mengehadkan bilangan tugas kepada 10 secara serentak.
  • Tunggu() memperoleh permit daripada SemaphoreSlim, memastikan bahawa had konkurensi maksimum dipatuhi.
  • Task.Factory.StartNew() mencipta dan memulakan Tugasan baharu untuk setiap tugasan.
  • Teruskan Dengan () menambah kesinambungan pada setiap Tugasan yang mengeluarkan permit SemaphoreSlim apabila tugas itu selesai.

Dengan menggunakan pendekatan ini, anda boleh mengurus satu set tugasan dengan berkesan, mengehadkan bilangan tugasan yang dijalankan serentak kepada nilai yang ditentukan, sambil turut memanfaatkan faedah Tugasan untuk pelaksanaan tugas tak segerak.

Atas ialah kandungan terperinci Bagaimanakah SemaphoreSlim dan Tasks Boleh Digunakan untuk Menguruskan Tugasan Serentak dengan Cekap?. 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