gpt4 book ai didi

c# - 这种异步/等待方法有什么问题?

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:42 25 4
gpt4 key购买 nike

我正在尝试将图像源属性设置为从 API 以 JSON 格式返回的 Uri。返回的 JSON 对象有两个属性。

我创建了以下辅助类来查询 API 并提取 Uri 属性:

public class GetPicUri
{
public GetPicUri()
{
}

private string _uri;

public async Task<string> Get()
{
var uri = new Uri("https://randompicture.api/random");
HttpClient getResponse = new HttpClient();
var json = await getResponse.GetStringAsync(uri);

var picture = JsonConvert.DeserializeObject<Picture>(json);

_uri = picture.Uri;
return _uri;
}
}

这是用于反序列化 JSON 的模型:

public class Picture
{
public Picture()
{
}

public string Description { get; set; }
public string Uri { get; set; }
}

问题是我无法访问 GetPicUri 类的字符串属性:

var picUri = new GetPicUri();
string imageSource = picUri.Get();

当我尝试这个时,我每次都会遇到异常:

cannot convert from 'System.Threading.Tasks.Task' to 'string'

我试过用很多不同的方式来分割它,例如将 Uri 作为静态字符串,并将 Get 方法作为 async Task(或 void) 并让它只更新静态字符串,并从构造函数中调用。我试过将它作为属性的 Get 方法运行。但我无法让它工作。

所以我想我有两个问题,第一个是我在这里具体做错了什么,从设计的角度来看,正确的方法是什么?

最佳答案

如果方法实际上是异步的,则将 Aync 添加到方法的名称中是一种很好的做法 - 例如:

public async Task<string> GetAsync()
{
var uri = new Uri("https://randompicture.api/random");
HttpClient getResponse = new HttpClient();
var json = await getResponse.GetStringAsync(uri);

var picture = JsonConvert.DeserializeObject<Picture>(json);

_uri = picture.Uri;
return _uri;
}

调用方式:

await picUri.GetAsync();

关于c# - 这种异步/等待方法有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54509414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com