C # Task.Delay блокирует вторую задачу - PullRequest
0 голосов
/ 10 мая 2018

Я хочу запустить две задачи.

StartAccessTokenTimer() запускается каждые 60 секунд и обновляет переменную accesstoken.StartItemsTimer() начнется после StartAccessTokenTimer() и будет работать каждые 3 секунды, если получен токен доступа.

    private accessToken = "";

    private async Task StartAccessTokenTimer()
    {
        CancellationTokenSource source = new CancellationTokenSource();

        while (true)
        {
            accesstoken = await GetAccessToken();
            await Task.Delay(TimeSpan.FromSeconds(3), source.Token);
        }
    }

    private async Task StartItemsTimer()
    {
        CancellationTokenSource source = new CancellationTokenSource();

        while (true)
        {
            var items = await GetItems(accessToken, "1");
            await Task.Delay(TimeSpan.FromSeconds(60), source.Token);
        }
    }

    public async Task StartOperations(){
        await StartAccessTokenTimer();
        await StartItemsTimer();
    }

Но он не заполняется GetItems() метот.Потому что StartAccessTokenTimer() никогда не запускается .. Он непрерывно стреляет GetAccessToken().

1 Ответ

0 голосов
/ 10 мая 2018

Чтобы запустить их одновременно, вы можете сделать следующее:

public async Task StartOperations()
{
    await Task.WhenAll(new Task[] 
    {
        StartAccessTokenTimer(),
        StartItemsTimer()
    });
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...