Вся модель представления обслуживается сразу, и нет существенной информации для представления, пока весь контент не будет готов к визуализации
На самом деле это не проблема.
Где-то вы, вероятно, получаете информацию из базы данных (вы упомянули сохранение изменений). Если вы взаимодействуете с базой данных асинхронно (например, ExecuteDataReaderAsync
), то ожидание ее означает, что во время выполнения запросапоток, который выполнил запрос, может делать другие вещи.Когда запрос завершит выполнение, этот поток (или другой, неважно) завершится.
Разрешение потоку делать что-то еще, в то время как запрос вместо того, чтобы делать что-либо, кроме ожидания, увеличивает производительность приложения.
Здесь я думаю, что возникает путаница: как async/await
делаетВаш метод контроллера выполняется быстрее? Это не .Не за что.Фактически, переключение потоков между такими задачами может сделать его чуть-чуть медленнее.(Как правило, это настолько тривиально, что вам не стоит об этом беспокоиться.)
Но в целом производительность вашего приложения может быть выше, поскольку доступно много потоков - , даже если это всего один - есть шанс, что они могут что-то делать, а не ждать.
Отдельные вещи, которые вы делаете (например, выполняете метод контроллера), не быстрее, но вы даете своему приложению шанс сделать больше с каждым потоком, который у него есть.Однако, если что-то займет много времени, оно может начаться раньше, потому что оно не ожидает потока, что означает, что он завершает раньше , а не быстрее.
Даже если ваше приложение получало по одному запросу за раз и обрабатывалопри использовании только одного потока, вот сценарий: что делать, если вы делаете два запроса к базе данных или API, где ни один из них не зависит от результатов другого?Если вы обрабатываете их синхронно, вы ждете, пока один из них завершится, начнете следующий и дождитесь следующего, чтобы закончить.Если вы обрабатываете их асинхронно, вы запускаете один, и пока вы ждете, вы можете запустить следующий.Ни одна отдельная задача не происходит быстрее.Разница в том, что вторая задача запускается раньше - хотя с первой она не связана, кроме как с ожиданием.
Так что, пока мы говорим о «потоках», на самом деле речь идет не о нескольких потоках.Речь идет о том, как используется каждый отдельный поток.