ParallelHelper.cs 921 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. namespace Universal;
  2. public class ParallelHelper : IDisposable
  3. {
  4. private readonly List<Task> _tasks = [];
  5. private bool _isStarted = false;
  6. void IDisposable.Dispose()
  7. {
  8. _tasks.ForEach(task => task.Dispose());
  9. _tasks.Clear();
  10. _isStarted = false;
  11. }
  12. public bool Insert(Action action)
  13. {
  14. if (_isStarted)
  15. return false;
  16. Task task = new(action);
  17. _tasks.Add(task);
  18. return true;
  19. }
  20. public bool StartnWaitAll()
  21. {
  22. if (_isStarted)
  23. return false;
  24. _tasks.ForEach(t => t.Start());
  25. Task.WhenAll(_tasks).Wait();
  26. _isStarted = false;
  27. _tasks.Clear();
  28. return true;
  29. }
  30. public bool StartnWaitAny()
  31. {
  32. if (_isStarted)
  33. return false;
  34. _tasks.ForEach(t => t.Start());
  35. Task.WhenAny(_tasks).Wait();
  36. return true;
  37. }
  38. }