Saya memiliki loop async Parallel.ForEach () yang saya gunakan untuk mengunduh beberapa halaman web. Bandwidth saya terbatas sehingga saya hanya dapat mengunduh x halaman per waktu tetapi Parallel.ForEach mengeksekusi seluruh daftar halaman web yang diinginkan.
Apakah ada cara untuk membatasi nomor utas atau pembatas lainnya saat menjalankan Parallel.ForEach?
Kode demo:
Parallel.ForEach(listOfWebpages, webpage => {
Download(webpage);
});
Tugas sebenarnya tidak ada hubungannya dengan halaman web, jadi solusi perayapan web yang kreatif tidak akan membantu.
c#
.net
asynchronous
parallel.foreach
eugeneK
sumber
sumber
Jawaban:
Anda dapat menentukan
MaxDegreeOfParallelism
dalamParallelOptions
parameter:MSDN: Paralel. ForEach
MSDN: ParallelOptions.MaxDegreeOfParallelism
sumber
var opts = new ParallelOptions { MaxDegreeOfParallelism = Convert.ToInt32(Math.Ceiling((Environment.ProcessorCount * 0.75) * 1.0)) };
-1
sama dengan tidak menetapkannya sama sekali: "Jika [nilai] adalah -1, tidak ada batasan jumlah operasi yang dijalankan secara bersamaan"var opts = new ParallelOptions { MaxDegreeOfParallelism = Convert.ToInt32(Math.Ceiling((Environment.ProcessorCount * 0.75) * 2.0)) };
. Tautan ke utas vs. inti - askubuntu.com/questions/668538/…Anda dapat menggunakan ParallelOptions dan mengatur MaxDegreeOfParallelism untuk membatasi jumlah utas bersamaan:
sumber
Gunakan overload lain
Parallel.Foreach
yang membutuhkanParallelOptions
instance, dan aturMaxDegreeOfParallelism
untuk membatasi berapa banyak instance yang dieksekusi secara paralel.sumber
Dan untuk pengguna VB.net (sintaks aneh dan sulit ditemukan) ...
sumber