J'ai un projet Silverlight où je suis en train de remplir certaines données dans un constructeur:
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;
}
}
Malheureusement, j'obtiens une erreur:
Le modificateur
async
n'est pas valide pour cet article
Bien sûr, si je les envelopper dans une méthode standard et l'appeler à partir du constructeur:
public async void Foo()
{
Data = await GetDataTask();
}
il fonctionne très bien. De même, si j'utilise l'ancien intérieur de manière
GetData().ContinueWith(t => Data = t.Result);
Qui travaille trop. Je me demandais juste pourquoi on ne peut pas appeler await
à partir de l'intérieur d'un constructeur directement. Il y a probablement beaucoup d' (même évident) les cas limites et les raisons qui militent contre, je ne peux pas penser à tout. J'ai aussi de la recherche autour pour une explication, mais n'arrive pas à en trouver.