以前太淺再跑多執行緒都沒再限制Task的數量
所以一跑下去整台主機就卡給你看
因為把資源通通吃光了,那c#怎麼控制你想要的數量呢
使用SemaphoreSlim
class Program { private static readonly SemaphoreSlim Locker = new SemaphoreSlim(5); static async Task Main(string[] args) { List<Task> tasks = new List<Task>(); for (int i = 0; i < 100; i++) tasks.Add(Task.Run(() => TaskRun())); await Task.WhenAll(tasks); } public static Task TaskRun() { Locker.Wait(); return Task.Run(async () => { await Task.Run(() => { Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss}_Do work."); Thread.Sleep(3000); }) .ConfigureAwait(false); Locker.Release(); }); } }
我起了100個Task因為使用SemaphoreSlim限制每次只跑5個執行緒
所以每次最多就會執行5個,這樣就不會狂跑把主機資源都吃光光
沒有留言:
張貼留言