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

C# Task.Delay blocks second task

我要运行两个任务。

StartAccessTokenTimer() 运行s 每 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()

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

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