Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Melaksanakan Pelbagai Tugas serentak dengan Bilangan Benang Terhad Menggunakan C#?

Bagaimanakah Saya Boleh Melaksanakan Pelbagai Tugas serentak dengan Bilangan Benang Terhad Menggunakan C#?

Susan Sarandon
Lepaskan: 2025-01-02 15:08:38
asal
658 orang telah melayarinya

How Can I Execute Multiple Tasks Concurrently with a Limited Number of Threads Using C#?

Melaksanakan Tugasan Serentak dengan Benang Terhad

Masalah:

Andaikan anda mempunyai satu set tugasan yang mesti dilaksanakan secara berurutan, dengan hanya maksimum X tugasan dijalankan pada satu masa. Secara tradisinya, ThreadPool.QueueUserWorkItem() telah digunakan untuk tugasan sedemikian, tetapi ia kini dianggap sebagai pendekatan suboptimum.

Penyelesaian Menggunakan Tugasan:

Untuk mencapai had konkurensi ini menggunakan Tugas, kita boleh menggunakan objek SemaphoreSlim untuk mengurus bilangan utas yang tersedia. Berikut ialah coretan kod yang menunjukkan pendekatan:

SemaphoreSlim maxThread = new SemaphoreSlim(10);

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

Begini cara kod berfungsi:

  • Permulaan SemaphoreSlim: SemaphoreSlim dimulakan dengan kiraan utas maksimum daripada 10, yang membolehkan sehingga 10 tugasan dijalankan serentak.
  • Pelaksanaan Tugas: Untuk setiap tugasan yang akan dilaksanakan, kaedah Tunggu() semafor dipanggil, yang menyekat sehingga benang tersedia. Setelah urutan bebas, tugasan baharu dimulakan menggunakan Task.Factory.StartNew().
  • Penyelesaian Tugasan: Selepas setiap tugasan selesai, kaedah ContinueWith() yang dilampirkan pada keluaran tugasan benang yang digunakan dengan memanggil kaedah Release() semaphore.
  • Berurutan Pelaksanaan: Oleh kerana ketersediaan benang terhad yang dikuatkuasakan oleh semaphore, tugasan dilaksanakan secara berurutan, dengan maksimum 10 tugasan dijalankan pada bila-bila masa.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Pelbagai Tugas serentak dengan Bilangan Benang Terhad Menggunakan C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan