我有一个项目,我试图在一个构造函数中填充一些数据:
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;
}
}
不幸的是,我得到一个错误:
修饰符async对此项无效
当然,如果我包装一个标准方法,并从构造函数调用它:
public async void Foo()
{
Data = await GetDataTask();
}
它工作得很好。同样,如果我用以前由内而外的方法
GetData().ContinueWith(t => Data = t.Result);
这也有用。我只是想知道为什么我们不能直接从构造函数中调用await。可能有很多(甚至明显的)边缘情况和理由反对它,我只是想不出任何一个。我也四处寻找解释,但似乎找不到任何解释。