Я думаю, что мой пример ниже может следовать подходу @ Stephen-Cleary, но я хотел бы привести закодированный пример.Это для использования в контексте привязки данных, например, Xamarin.
Конструктор класса - или действительно установщик другого свойства, от которого он зависит - может вызвать асинхронную пустоту, которая заполнит свойство по завершениизадачи без необходимости ждать или заблокировать.Когда он наконец получит значение, он обновит ваш пользовательский интерфейс с помощью механизма NotifyPropertyChanged.
Я не уверен ни в каких побочных эффектах вызова aysnc void из конструктора.Возможно, комментатор остановится на обработке ошибок и т. Д.
class MainPageViewModel : INotifyPropertyChanged
{
IEnumerable myList;
public event PropertyChangedEventHandler PropertyChanged;
public MainPageViewModel()
{
MyAsyncMethod()
}
public IEnumerable MyList
{
set
{
if (myList != value)
{
myList = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("MyList"));
}
}
}
get
{
return myList;
}
}
async void MyAsyncMethod()
{
MyList = await DoSomethingAsync();
}
}