如何 运行 在 IHostedService 的后台同时执行多个任务

How to run multiple tasks simultaneously in the background of a IHostedService

我有一个 ASP.NET 核心应用程序,它 运行 是一个 IHostedService class 作为后台工作者。现在我有两个任务 运行 没完没了。

现在我的问题是:
我如何让这两个任务运行同时进行?因为现在 Task1 正在阻止 Task2 执行。任何有关如何更好地解决此问题的帮助或建议将不胜感激。

IHostedService

public async Task StartAsync(CancellationToken cancellationToken)
{
    await Task1();
    new Thread(Task2).Start();
}

public async Task Task1()
{
    using (var client = new StreamingWebSocketClient("wss://websocket.io"))
    {
       //Receive data from Websocket and store in MSSQLDB using EF Core
    }
}

private void Task2()
{
    using (_dbContext)
    {
        while (true)
        {
            var transactions = _dbContext.Transactions.Where(t => t.To == null).ToList();

            foreach (Models.Transaction transaction in transactions)
            {
                //Do some work
            }
            Thread.Sleep(10000);
        }
    }
}

在第二个任务运行之前不要await第一个任务:

public async Task StartAsync(CancellationToken cancellationToken)
{
    var task1 = Task1();
    var task2 = Task.Run(() => Task2());
    await Task.WhenAll(task1, task2);
}

这样做会稍微好一点:

public async Task StartAsync(CancellationToken cancellationToken)
{
    var task1 = Task1();
    var task2 = Task2(cancellationToken);
    await Task.WhenAll(task1, task2);
}


private async Task Task2(CancellationToken cancellationToken)
{
    using (var dbContext = new DbContext())
    {
        while (true)
        {
            if (cancellationToken.IsCancellationRequested)
            {
                break;
            }
            else
            {
                var transactions = dbContext.Transactions.Where(t => t.To == null).ToList();
                foreach (Models.Transaction transaction in transactions)
                {
                    //Do some work
                }
                await Task.Delay(TimeSpan.FromSeconds(10.0));
            }
        }
    }
}