У меня есть контроллер async asp.net. Этот контроллер вызывает метод async. Метод, который фактически выполняет работу async IO, глубоко в моем приложении. Ряд методов между контроллером и последним методом в цепочке отмечены асинхронным модификатором. Вот пример того, как у меня есть установки коды:async all the way down issue
public async Task<ActionResult> Index(int[] ids)
{
List<int> listOfDataPoints = dataPointService(ids);
List<Task> dpTaskList = new List<Task>();
foreach (var x in listOfDataPoints)
{
dpTaskList.Add(C_Async(x));
}
await Task.WhenAll(dpTaskList);
return View();
}
private async Task C_Async(int id)
{
//this method executes very fast
var idTemp = paddID(id);
await D_Async(idTemp);
}
private async Task D_Async(string id)
{
//this method executes very fast
await E_Async(id);
}
private async Task E_Async(string url)
{
//this method performs the actual async IO
result = await new WebClient().DownloadStringTaskAsync(new Uri(url))
saveContent(result);
}
Как вы можете видеть, что контроллер вызывает C_Async (х) асинхронна, то есть цепь асинхронных методов к E_Async. Существуют методы между контроллером и E_Async, и все они имеют модификатор async. Есть ли штраф за производительность, поскольку существуют методы, использующие асинхронный модификатор, но не выполняющий работу с асинхронным IO?
Примечание: Это упрощенная версия реального кода, существует более асинхронных методов между контроллером и методом E_Async.
Возможный дубликат [Async all the down down?] (Http: // stackoverflow.com/questions/12016322/async-all-the-way-down) –
Конечно, есть накладные расходы. Но ваш вопрос ведет неверный путь. Если вызываемые задачи быстрые, вы можете их синхронно вызывать без async. Если вы хотите быть уверенным: Измерьте. –
@Alois - Точно, как бы я вызывал методы синхронно при вызове последнего метода асинхронно? Я новичок в асинхронном программировании, поэтому не стесняйтесь переписывать мой пост. – Luke101