У меня есть этот кусок кода в моем приложении .netcore
[HttpPost]
[Route("doSomething")]
public async Task<IActionResult> DoSomethingAsync([FromBody] Input input)
{
// Do Something
var task1 = Task.Run(async () =>
{
await taskFactory.DoTask(input);
});
// Do Something Differently
var task2 = Task.Run(async () =>
{
await taskFactory.DoAnotherTask(input);
});
await Task.WhenAll(task1, task2);
return Accepted();
}
DoTask()
и DoAnotherTask()
оба независимы друг от друга и могут выполняться параллельно, но их следует ожидать до тех пор, пока оба из них в завершенном состоянии.
Итак, я создал две задачи и ожидал их, используя Task.WhenAll()
.
Но у меня есть комментарий к обзору, чтобы не использовать Task.Run()
в async
метод, поскольку это может привести к истощению пула потоков.
Вопрос 1: Как мой код ведет к истощению пула потоков?
Вопрос 2: Если он приводит к истощению пула потоков, как я могу запустить обе задачи параллельно?