异步方法返回类型
本文关键字:返回类型 异步方法 | 更新日期: 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
。
- 为了使用 await,方法需要在声明中包含"异步任务"
- 不允许异步构造函数。
您几乎没有选择,例如
- 使用异步工厂模式,不要在构造 函数
- 使用异步初始化模式
如果必须使用第一个选项,则代码可能如下所示
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。