У меня есть проект, в котором я пытаюсь заполнить некоторые данные в конструкторе:
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
из конструктора напрямую. Вероятно, есть много (даже очевидных) крайних случаев и причин против этого, я просто не могу придумать ни одного. Я также ищу объяснения, но не могу найти ни одного.