我想用异步方法填充MyModel的这个列表。 async方法返回MyModel的List。
我想在其他函数中调用MyClass.list。
代码:
public static class MyClass
{
public static List<MyModel> list= await MyHelper.GetCache();
我收到了一个错误:
严重级代码描述项目文件行抑制状态 错误CS1992'await'运算符只能在包含时使用 在用'async'修饰符标记的方法或lambda表达式中
有什么想法吗?
答案 0 :(得分:1)
你不能在这样的静态初始化器中使用await。但是你可以阻止并等待结果
public static class MyClass
{
public static List<MyModel> list= MyHelper.GetCache().Wait()
答案 1 :(得分:1)
使用.Wait()
基于您的环境可能会导致死锁(桌面或ASP.NET应用程序)
另一种方法是创造&#34;懒惰&#34;返回所需列表的加载方法。
private static List<MyModel> MyModelInternal;
public static async Task<List<MyModel>> GetMyModelAsync()
{
if (MyModelInternal == null)
{
MyModelInternal = await MyHelper.GetCacheAsync();
}
return Task.FromResult(MyModelInternal);
}
如果内部列表已启动方法将返回完成任务。
或者,如果您有一些可以执行异步方法的UI方法,那么您可以在那里初始化列表。