Acho que meu exemplo abaixo pode seguir a abordagem de Stephen-Cleary, mas eu queria dar um exemplo codificado. Isso é para uso em um contexto de ligação de dados, por exemplo, Xamarin.
O construtor da classe - ou mesmo o criador de outra propriedade da qual depende - pode chamar um vazio assíncrono que preencherá a propriedade após a conclusão da tarefa sem a necessidade de aguardar ou bloquear. Quando finalmente obtiver um valor, atualizará sua interface do usuário por meio do mecanismo NotifyPropertyChanged.
Não tenho certeza sobre nenhum efeito colateral de chamar um aysnc de um construtor. Talvez um comentarista elabore um tratamento de erro, etc.
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();
}
}