C# 中一個限制 Task 並發執行的數量的示例


直接貼代碼了:

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

    class TaskSample
    {
        public static void Do()
        {
            Run();
        }

        private static readonly SemaphoreSlim _mutex = new SemaphoreSlim(5);

        private static void Run()
        {
            var allTasks = Enumerable.Range(1, 10000000).Select(id => DoWorkAsync(id));
            //await Task.WhenAll(tasks);
            Task.WaitAll(allTasks.ToArray());
        }

        private static async Task DoWorkAsync(int id)
        {
            await _mutex.WaitAsync();
            try
            {
                Console.WriteLine($"Starting Work {id}");
                await HttpClientGetAsync();
                Console.WriteLine($"Finished Work {id}");
            }
            finally
            {
                _mutex.Release();
            }
        }

        static async Task HttpClientGetAsync()
        {
            await Task.Delay(2000);
        }

    }

 

運行截圖:

 

謝謝瀏覽!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM