c# - 如何等待多个 C# 事件?
问题描述
我想为以下问题找到一个好的解决方案。例如,我有 5 个计时器,我从 1 个线程开始。这些计时器在几秒钟后完成它们的工作(这是一种重试机制)。我想等待所有的计时器完成他们的工作。
所以问题是,有没有什么好的模式可以处理这个问题?或者你现在是不是一个布尔集合的好解决方案,如果所有元素都是真的,那么所有的计时器都完成了:D
提前感谢您的回答!
解决方案
这听起来像你真的想使用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;
}
推荐阅读
- ruby-on-rails - 在 Heroku 上运行许多 rake 任务时出现内存问题
- reactjs - 上传文件时转到错误的 url
- python - 如何在程序运行时在 Python 中更新 tkinter texbox
- azure-devops - 天蓝色静态 Web 应用程序,如何从同一个 git 存储库构建两个不同的 Web 应用程序(一个产品和一个非产品)?
- c - 创建一个字符串的副本,但在 C 中反转
- javascript - 来自用户输入的维度数组,然后在 JavaScript 中进行转换
- python - 获取熊猫数据框中每一行中非零值的列索引
- ldap - 与 LDAP 用户关联的组何时在 Artifactory 中更新?
- azure - Azure devops 构建管道依赖于其他构建管道
- r - R中的自动化?从多列中的重复值创建值?