异步方法返回类型

本文关键字:返回类型 异步方法 | 更新日期: 2023-09-27 18:30:33

在代码中,我在WallModel方法中等待,但我无法使用异步。如何在此代码中使用异步和等待?

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; }
}

异步方法返回类型

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

  1. 为了使用 await,方法需要在声明中包含"异步任务"
  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。