Использование ExecuteStoreQueryAsync внутри приложения Asp.Net в C # - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть приложение для веб-форм Asp.Net, и на Page_Load event моей страницы указан следующий код

protected async void Page_Load(object sender, EventArgs e)
  {
     var data = await ChartDataHelper.GetBidsAverageCycle("2018", "Q4",              
                "Fiscal");
      SomeSyncOperation();
  }

, а вот основной метод

public static async Task<List<BidAveragceCycleModel>> GetBidsAverageCycle(string year, string quarter, string yearType)
        {
            SqlParameter parameter1 = new SqlParameter("@RequestData", BuildMonthsFilter(year, quarter, yearType));
            var data =await Entities.Current.ExecuteStoreQueryAsync<BidAveragceCycleModel>("exec Dashboard_Bids_AverageCycleTime @RequestData"
                 , new[] { parameter1 });
            return data.ToList();
        }

Iдумал, что у него await on the ExecuteStoreQueryAsync will return the control back to Page_Load and call SomeSyncOperation(), но похоже, что он работает в synchronous fashion, и через 10 секунд, когда Stored Proc возвращает данные, он вызывает data.ToList(), а затем возвращается только к вызову Page_Load.

Может кто-нибудь, пожалуйста, скажите мне, что я здесь делаю неправильно.

Спасибо

1 Ответ

0 голосов
/ 05 апреля 2019

через 10 секунд, когда Stored Proc возвращает данные, он вызывает data.ToList (), а затем возвращается только к вызову Page_Load.

Так работает async / await.

Если вы хотите, чтобы Page_Load закончил перед загрузкой data, то вы можете сохранить Task<List<BidAveragceCycleModel>> и Page_Load назначить эту переменную задачи (без await ing Это). Затем, когда понадобятся эти данные, код может await, что Task<T>.

...