首页 > 解决方案 > 如何等待多个 C# 事件?

问题描述

我想为以下问题找到一个好的解决方案。例如,我有 5 个计时器,我从 1 个线程开始。这些计时器在几秒钟后完成它们的工作(这是一种重试机制)。我想等待所有的计时器完成他们的工作。

所以问题是,有没有什么好的模式可以处理这个问题?或者你现在是不是一个布尔集合的好解决方案,如果所有元素都是真的,那么所有的计时器都完成了:D

提前感谢您的回答!

标签: c#.netmultithreadingtimer

解决方案


这听起来像你真的想使用Task而不是Timer.

愚蠢的例子:

async Task DoAsync()
{
  var allTheWork = new [] { Work(), Work(), Work() };

  await Task.WhenAll(allTheWork);

  // Did all the sub-tasks return true?
  if (allTheWork.All(i => i.Result))
  {
  }
}

async Task<bool> Work()
{
  var retries = 3;
  while (retries-- > 0)
  {    
    if (success) return true;

    await Task.Delay(2000); // This is the timer; you can find better retry patterns of course
  }

  return false;
}

推荐阅读