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
616 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!

sumber:php.cn
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