Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menjalankan Banyak Tugasan Secara Berurutan dengan Bilangan Tugasan Serentak yang Terhad dalam .NET?

Bagaimanakah Saya Boleh Menjalankan Banyak Tugasan Secara Berurutan dengan Bilangan Tugasan Serentak yang Terhad dalam .NET?

DDD
DDDasal
2024-12-28 10:29:18877semak imbas

How Can I Run Many Tasks Sequentially with a Limited Number of Concurrent Tasks in .NET?

Menjalankan Set Tugasan Secara Berurutan dengan Had Tugasan

Andaikan anda mempunyai senario di mana anda perlu melaksanakan sejumlah besar tugas (cth. , 100), tetapi anda ingin mengehadkan bilangan tugas yang dijalankan serentak (cth., 10). Masalah ini boleh ditangani dengan cekap menggunakan kelas 'Task' yang diperkenalkan dalam .NET Framework 4.0.

Dalam senario yang diberikan, kita boleh menggunakan kelas 'SemaphoreSlim' untuk mengawal bilangan maksimum tugasan yang dijalankan serentak. 'SemaphoreSlim' membolehkan anda mencipta objek semaphore yang boleh mengehadkan bilangan operasi serentak.

Berikut ialah contoh pelaksanaan yang menunjukkan cara untuk mencapai tingkah laku yang anda inginkan:

using System.Threading.Tasks;
using System.Threading;

class Program
{
    static void Main()
    {
        // Create a SemaphoreSlim object to limit the number of concurrent tasks to 10
        SemaphoreSlim maxThread = new SemaphoreSlim(10);

        // Create 115 tasks with each task performing a specific action
        for (int i = 0; i < 115; i++)
        {
            // Acquire a permit from the SemaphoreSlim object, blocking if the limit is reached
            maxThread.Wait();

            // Schedule a new task
            Task.Factory.StartNew(() =>
            {
                // Perform your desired task here
            }, TaskCreationOptions.LongRunning)
            // Once the task is complete, release the permit back to the SemaphoreSlim object
            .ContinueWith((task) => maxThread.Release());
        }
    }
}

Dalam pelaksanaan ini , setiap tugasan memperoleh permit daripada objek 'SemaphoreSlim' sebelum ia boleh dilaksanakan. Jika bilangan maksimum permit (10 dalam kes ini) telah diperoleh, semaphore menyekat tugasan berikutnya daripada memperoleh permit sehingga permit dikeluarkan.

Dengan menggunakan pendekatan ini, anda boleh melaksanakan satu set tugasan secara berurutan, memastikan bahawa hanya bilangan tugasan yang telah ditetapkan berjalan serentak. Setelah semua tugasan selesai, kaedah 'Utama' akan keluar, menunjukkan tamatnya program.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjalankan Banyak Tugasan Secara Berurutan dengan Bilangan Tugasan Serentak yang Terhad dalam .NET?. 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