从异步方法填充静态属性

时间:2017-06-01 09:09:02

标签: c# asynchronous async-await

我想用异步方法填充MyModel的这个列表。 async方法返回MyModel的List。

我想在其他函数中调用MyClass.list。

代码:

 public static class MyClass
    {
       public static List<MyModel> list= await MyHelper.GetCache();

我收到了一个错误:

  

严重级代码描述项目文件行抑制状态   错误CS1992'await'运算符只能在包含时使用   在用'async'修饰符标记的方法或lambda表达式中

有什么想法吗?

2 个答案:

答案 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方法,那么您可以在那里初始化列表。