2018年12月19日 星期三

【C#】Max concurrent tasks

  1. static void Main()
  2. {
  3. Foo();
  4. Console.ReadLine();
  5. }
  6.  
  7. private static async Task Foo()
  8. {
  9. var urls = new[] {
  10. "A",
  11. "B",
  12. "C",
  13. "D",
  14. "E",
  15. };
  16. var maxThreads = 4;
  17. var q = new ConcurrentQueue<string>(urls);
  18. var tasks = new List<Task>();
  19. for (int n = 0; n < maxThreads; n++)
  20. {
  21. tasks.Add(Task.Run(async () =>
  22. {
  23. while (q.TryDequeue(out string url))
  24. {
  25. Console.WriteLine($"start {url}");
  26. await Task.Delay(3000);
  27. Console.WriteLine($"end {url}");
  28. }
  29. }));
  30. }
  31. await Task.WhenAll(tasks);
  32. }
ref: sound code

沒有留言:

張貼留言