代码改变世界

C# 中一个限制 Task 并发执行的数量的示例

2019-09-09 11:58  音乐让我说  阅读(3317)  评论(0编辑  收藏  举报

直接贴代码了:

   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);
        }

    }

 

运行截图:

 

谢谢浏览!