Думаю, я что-то не понимаю. Я думал, что Task.Yield()
принудительно запускает новый поток/контекст для задачи, но после перечитывает этот ответ кажется, что он просто заставляет метод быть асинхронный. Он все равно будет в том же контексте.
Какой правильный способ - в процессе asp.net - создавать и запускать несколько задач параллельно, не вызывая тупика?
Другими словами, предположим, что у меня есть следующий метод:
async Task createFileFromLongRunningComputation(int input) {
//many levels of async code
}
И когда ударит определенный маршрут POST, я хочу одновременно запустить вышеуказанные методы 3 раза, немедленно вернуться, но регистрировать, когда все три выполнены.
Думаю, мне нужно добавить что-то подобное в мое действие
public IHttpAction Post() {
Task.WhenAll(
createFileFromLongRunningComputation(1),
createFileFromLongRunningComputation(2),
createFileFromLongRunningComputation(3)
).ContinueWith((Task t) =>
logger.Log("Computation completed")
).ConfigureAwait(false);
return Ok();
}
Что нужно сделать в createFileFromLongRunningComputation
? Я думал, что Task.Yield
верен, но, похоже, это не так.