Как выполнять асинхронный метод в C#?

У меня есть асинхронный метод, определенный в моей деловой логике посредством TPL, которая позволяет мне получать список 5000 продуктов базы данных со следующим кодом.

 public async Task ProductList() {
      await this.ProductServices.ListAsync();
 }

Послав загружать формуляр я делаю призыв к асинхронному методу внутри события Form_Load но этот не наполняет Grid с данными, как он был бы должен делать ProductList отлаживая ощутитесь, что он не входит в асинхронный метод.

Код, где я это называю, - этот:

 private void Form1_Load(object sender, EventArgs e)
 {
      this.ProductList();
 }
1
задан 10.01.2017, 22:37
0 ответов

Тебе не хватает 2 деталей:

  1. Добавлять модификатор async в заявление метода Form1_Load.
  2. Его делать его одним await в вызов this.ProductList().

Код:

private async void Form1_Load(object sender, EventArgs e)
{
    await this.ProductList();
}

Глаз, который, хотя вызов асинхронный, то есть освобождает UI thread пока загружаются твои продукты, это не меняет факт, который окно не будет заканчивать загружать до тех пор, пока он не завершит выполнение метода ProductList. В других словах, не надейся, что ты можешь видеть окно до тех пор, пока он не закончит выполнять ProductList.

Если это не то, что ты хочешь, вероятно будь должен выполнять ProductList внутри другого event handler, более соответствовавшего твоей необходимости.

2
ответ дан 03.12.2019, 17:46
  • 1
    У тебя есть вся razó n это была проблема. Сейчас, если он загружает данные @sstan –  10.01.2017, 22:48

Чтобы называть асинхронный метод внутри события Load ты должен использовать также ключевое слово async в Form_Load и await чтобы звонить в метод. Может быть, там была проблема.

 private async void Form1_Load(object sender, EventArgs e)
 {
      await this.ProductList();
 }
0
ответ дан 03.12.2019, 17:46