Для реализации ограничения на одновременное скачивание файлов в C# можно использовать механизм управления потоками или задачами.
Один из способов - использовать семафор, который позволит задать максимальное количество одновременно выполняющихся операций скачивания. Вот пример использования семафора для ограничения на одновременное скачивание файлов:
using System; using System.Net; using System.Threading; class Downloader { private static Semaphore semaphore = new Semaphore(2, 2); // Максимальное количество одновременных скачиваний public static void DownloadFile(string url) { semaphore.WaitOne(); // Захватываем разрешение Console.WriteLine($"Downloading file from: {url}"); WebClient client = new WebClient(); client.DownloadFile(url, $"downloaded_{Guid.NewGuid()}.txt"); Console.WriteLine($"Download complete from: {url}"); semaphore.Release(); // Освобождаем разрешение } } class Program { static void Main() { Thread t1 = new Thread(() => Downloader.DownloadFile("https://example.com/file1.txt")); Thread t2 = new Thread(() => Downloader.DownloadFile("https://example.com/file2.txt")); Thread t3 = new Thread(() => Downloader.DownloadFile("https://example.com/file3.txt")); t1.Start(); t2.Start(); t3.Start(); t1.Join(); t2.Join(); t3.Join(); } }
В данном примере мы создаем семафор с максимальным количеством одновременных операций скачивания (2). Метод DownloadFile
ограничивается с помощью семафора, захватывая разрешение до начала скачивания и освобождая его после завершения. Таким образом, не более двух операций скачивания могут выполняться параллельно.