Могут ли конструкторы быть асинхронными?C#

Место общения программистов C#
Anonymous
Могут ли конструкторы быть асинхронными?

Сообщение Anonymous »

У меня есть проект, в котором я пытаюсь заполнить некоторые данные в конструкторе:

Код: Выделить всё

public class ViewModel
{
public ObservableCollection Data { get; set; }

async public ViewModel()
{
Data = await GetDataTask();
}

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

Вернуться в «C#»