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