这个问题在这里已有答案:
我如何Lazy
使用async-await
加载Bars集合?它必须从MyClass实例获取Id以获取特定的集合。
public class MyClass {
public int Id { get; set; }
public Lazy<List<Bar>> Bars { get; private set; }
public MyClass() {
Bars = new Lazy<List<Bar>>(async () => await LoadBars(), true);
}
private async Task<List<Bar>> LoadBars() {
return await Util.Database.GetBarsAsync(Id);
}
}
这个集合消耗了大量内存,所以我只想在需要时加载它。
我得到的错误是在=>
:
无法将异步lambda表达式转换为委托类型'Func>'。异步lambda表达式可能返回void,Task或Task,其中任何一个都不能转换为'Func>'
简短的回答;你不能(没有各种技巧),但你可以这样做:
public class MyClass {
public int Id { get; set; }
public Lazy<Task<List<Bar>>> Bars { get; private set; }
public MyClass() {
Bars = new Lazy<Task<List<Bar>>>(() => LoadBars(), true);
}
private Task<List<Bar>> LoadBars() {
return Util.Database.GetBarsAsync(Id);
}
private async SomethingElseAsync() {
List<Bar> bars = await Bars.Value;
}
}