У меня есть проект, в котором я пытаюсь заполнить некоторые данные в конструкторе:
public class ViewModel
{
public ObservableCollection<TData> Data { get; set; }
async public ViewModel()
{
Data = await GetDataTask();
}
public Task<ObservableCollection<TData>> GetDataTask()
{
Task<ObservableCollection<TData>> task;
//Create a task which represents getting the data
return task;
}
}
К сожалению, я получаю сообщение об ошибке:
Модификатор
async
недопустим для этого элемента
Конечно, если я использую стандартный метод и вызываю его из конструктора:
public async void Foo()
{
Data = await GetDataTask();
}
он работает нормально. Точно так же, если я использую старый способ наизнанку
GetData().ContinueWith(t => Data = t.Result);
, это тоже сработает. Мне просто интересно, почему мы не можем вызвать await
напрямую из конструктора. Вероятно, есть много (даже очевидных) крайних случаев и причин против этого, я просто не могу придумать ни одного. Я тоже искал объяснение, но, похоже, не нашел.