作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个非常简单的 for 循环,看起来像这样
for(int i = 0; i< 26; i++)
{
DoSomething(i);
}
DoSomething 函数执行大约需要 3 分钟。我想编写一个 for 循环,每分钟调用 DoSomething() 而无需等待上一个调用完成。我试图做这样的事情:
Parallel.For(0, 26, i =>
{
DoSomething(i);
System.Threading.Thread.Sleep(60000);
}
但是它不起作用,因为它先调用然后休眠。颠倒这些步骤还意味着 DoSomething 方法会在每次调用之间毫无延迟地调用 fire。如何设置它以便每分钟调用 DoSomething?
谢谢!
最佳答案
您可以使用 Task.Delay
,它在内部使用一个 Timer
对象:
public async Task DoSomethingAndWaitAsync()
{
int i = 0
while (i < 26)
{
Task.Run(() => DoSomething(i));
await Task.Delay(TimeSpan.FromMinutes(1));
i++;
}
}
或者如果你想保留 for
循环:
public async Task DoSomethingAndWaitAsync()
{
for (int i = 0; i < 26; i++)
{
Task.Run(() => DoSomething(i));
await Task.Delay(TimeSpan.FromMinutes(1));
}
}
关于c# 具有分钟延迟的并行 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30513348/
我是一名优秀的程序员,十分优秀!