1

在我在 WallModel 方法中等待的代码中,但我不能使用异步。如何在此代码中使用 async 和 await ?

class WallModel
{
    public WallModel()
    {
        WallItems = new ObservableCollection<Wall>();
        HttpClient client = new HttpClient();
        HttpResponseMessage response = await client.GetAsync("XXXXX");
        string Parse_Text = await response.Content.ReadAsStringAsync();


    }
    public ObservableCollection<Wall> WallItems { get; set; }
}
4

2 回答 2

2

你的WallModel方法实际上是一个构造函数,它不能被标记async,所以你也不能await在它的主体中使用。

于 2013-09-08T20:28:18.567 回答
0
  1. 为了使用等待,方法需要在声明中具有“异步任务”
  2. 不允许使用异步构造函数。

你有几个选择,比如

  1. 使用异步工厂模式并且不在构造函数中进行初始化
  2. 使用异步初始化模式

如果您必须使用第一个选项,您的代码可能看起来像这样

class WallModel
{
    public WallModel()
    {
        WallItems = new ObservableCollection<Wall>();            

        Initialization = InitializeAsyn();
    }

    public Task Initialization { get; private set; }

    private async Taks InitializeAsyn()
    {
        HttpClient client = new HttpClient();
        HttpResponseMessage response = await client.GetAsync("XXXXX");
        string Parse_Text = await response.Content.ReadAsStringAsync();
    }

    public ObservableCollection<Wall> WallItems { get; set; }
    }
}

然后在课外的某个地方

var instance = new WallModel();
await instance.Initialization;

关于这个主题的好文章以及如何做到这一点(正如作者在其他答案中提到的那样)http://blog.stephencleary.com/2013/01/async-oop-2-constructors.html

于 2013-09-08T21:07:48.787 回答