У меня есть куча работы (связанной с ЦП или IO без использования асинхронного интерфейса) внутри Задачи. Мне интересно, можно ли просто выполнять всю не асинхронную работу в рамках задачи, например:
async Task DoSomeStuff()
{
await SomethingAsync();
…
DoCpuBoundWork();
…
await SomethingElseAsync();
}
или я должен использовать Task.Run, как это?
async Task DoSomeStuff()
{
await SomethingAsync();
…
await Task.Run(() => DoCpuBoundWork());
…
await SomethingElseAsync();
}
Я знаю, что задачи не обязательно выполняются в другом потоке, поэтому мне интересно, может ли планировщик делать предположения о неблокируемых задачах, которые заставят выполнять работу с привязкой к ЦП вне Task.Run замедлять работу приложения , Например, если планировщик решил запланировать работу с привязкой к ЦП в потоке пользовательского интерфейса приложения, это может привести к замедлению.
Я уверен, что этот вопрос задавался ранее, но я не могу найти правильные ключевые слова для его поиска, так что извините за это.