我试图同时运行两个方法。第一个方法连接到ftp服务器并下载一些数据。由于我想要减少网络流量,它应该每30秒运行一次。与此同时,我希望另一个方法每10秒独立于第一个方法运行。
问题在于我无法让这两个方法同时运行或有序延迟。
我期望输出以下内容,并在它们之间加上相应的暂停时间: 10秒 10秒 10秒 30秒 10秒 10秒 10秒 30秒 ...
但是实际上这两种方法都会等待对方,所以我得到的输出是 10秒 30秒 10秒 30秒 10秒 30秒,其中有40秒的暂停。
欢迎提供任何帮助和提示。
问题在于我无法让这两个方法同时运行或有序延迟。
namespace Example
{
class Program
{
static async Task Main(string[] args)
{
await Task.Run(async () =>
{
while (true)
{
await Every10s();
await Every30s();
}
});
}
public static async Task<bool> Every10s()
{
await Task.Delay(10000);
Console.Writeline("10s");
return true;
}
public static async Task<bool> Every30s()
{
await Task.Delay(30000);
Console.Writeline("30s");
return true;
}
}
}
我期望输出以下内容,并在它们之间加上相应的暂停时间: 10秒 10秒 10秒 30秒 10秒 10秒 10秒 30秒 ...
但是实际上这两种方法都会等待对方,所以我得到的输出是 10秒 30秒 10秒 30秒 10秒 30秒,其中有40秒的暂停。
欢迎提供任何帮助和提示。
await Task.WhenAll(list)
。您需要在每个while循环中执行此操作。请注意,对于此用例,我建议使用计时器而不是async/await,因为这实际上就是计时器的定义。另一个不在此处使用async/await的原因是因为async/await并不真正并行(我会在这里链接到一篇很棒的文章,但我忘记了它来自哪里)。 - Joelius