C#Task.Delay阻止第二个任务

时间:2018-05-10 12:09:48

标签: c# asynchronous async-await task-parallel-library

我想要执行两项任务。

StartAccessTokenTimer()每60秒运行一次并刷新accessstoken变量。 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() methot。因为StartAccessTokenTimer()永远不会启动..它会持续触发GetAccessToken()

1 个答案:

答案 0 :(得分:1)

要同时触发它们,您可以执行以下操作:

public async Task StartOperations()
{
    await Task.WhenAll(new Task[] 
    {
        StartAccessTokenTimer(),
        StartItemsTimer()
    });
}