Ich habe ein Projekt, wo ich versuche, einige Daten in einem Konstruktor zu füllen:
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;
}
}
Leider erhalte ich eine Fehlermeldung:
Der Modifikator
async
ist für diesen Artikel nicht gültig
Natürlich, wenn ich eine Standardmethode einpacke und diese vom Konstruktor aus aufrufe:
public async void Foo()
{
Data = await GetDataTask();
}
Es funktioniert gut. Ebenso, wenn ich die alte Methode von innen nach außen verwende
GetData().ContinueWith(t => Data = t.Result);
Das funktioniert auch. Ich habe mich nur gefragt, warum wir nicht anrufen können await
direkt aus einem Konstruktor heraus. Es gibt wahrscheinlich viele (auch offensichtliche) Randfälle und Gründe dagegen, mir fallen nur keine ein. Ich habe auch nach einer Erklärung gesucht, aber ich kann keine finden.