Как запустить несколько методов асинхронно и параллельно с задержкой - PullRequest
3 голосов
/ 24 июня 2019

Я пытаюсь запустить два метода параллельно.Первый метод подключается к FTP-серверу и загружает некоторые данные.Поскольку я хочу уменьшить сетевой трафик, он должен запускаться каждые 30 с.Параллельно я хочу, чтобы другой метод запускался независимо от первого метода каждые 10 с.

Проблема в том, что я не получаю методы, запущенные / задержанные параллельно.

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 спауза.

Любая помощь и советы приветствуются.

1 Ответ

3 голосов
/ 24 июня 2019

Поскольку я хочу уменьшить сетевой трафик, он должен запускаться каждые 30 с.Параллельно я хочу, чтобы другой метод выполнялся независимо от первого метода каждые 10 с.

У вас есть два независимых цикла работы, поэтому вам нужно два цикла в вашем коде:

async Task RunEvery10s()
{
  while (true)
    await Every10s();
}

async Task RunEvery30s()
{
  while (true)
    await Every30s();
}

await Task.WhenAll(RunEvery10s(), RunEvery30s());
...