如何使用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或 任务,都不能转换为'Func>'
答案 0 :(得分:0)
简短回答;您不能(没有各种技巧),但是可以这样做:
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;
}
}