gpt4 book ai didi

c# - 卡在异步方法

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

可能有一些明显的错误,但我正在做一些没有经验的事情。我试图从互联网上获取一个字符串,但它不起作用。在 WinRT 中,我们必须在异步方法中使用 HttpClient,我是这样做的:-

    private async void update()
{
try
{
rawdata = await client.GetStringAsync(url);

}
catch
{
rawdata = "Updation failed. Error code:vish42042";
}

}

现在,这里是调用代码的方式:-

    string temp = @url;
update();
WAIT:
if (rawdata == null) {
goto WAIT;
}

rawdata 是一个全局变量,我在 goto WAIT: 上做了这个检查,以查看代码到底在哪里失败,并且它在这里失败。当从互联网更新原始数据时,我期待 if 循环中断,但它从未发生过。我做错了吗?(显然我没有以我所知道的最好的方式做这件事,但它也错了吗?)。问题出在哪里?

更新:实际上问题不在于如何使该功能起作用,而是在进行一两次修改后起作用。真正的问题是我如何确保在调用 update() 函数后更新原始数据,因为此后的代码期望它不是空的而是更新的。

经过一些很好的解释和回答,我认为这就是问题可以解决的地方:-

     string xmlstring = xmlupobj.getUpdatedData(); 
// Above is the ultimate point of return of data.
//Next code line is this, which throws a null exception
XDocument xmldoc = XDocument.Parse(xmlstring);

所以我认为在使 getUpdatedData() 异步并返回 Task 之后,如果我们可以将 Task 转换为正确的字符串以防它已被下载,如果它尚未下载则为 null,那么我们可以使用一些错误的代码行进行检查作为:-

    string xmlstring = xmlupobj.getUpdatedData();
WAIT:
if (xmlstring == null)
{
goto WAIT;
}
xmldoc = XDocument.Parse(xmlstring);

那么如果是对的,剩下的问题就是如何设置xmlstring了?

最佳答案

你应该让这个方法返回一个Task:

private async Task update()
{
try
{
using (var client = new HttpClient())
{
rawdata = await client.GetStringAsync(url);
}
}
catch
{
rawdata = "Updation failed. Error code:vish42042";
}
}

然后当你调用它时:

string temp = @url;
await update();

// rawdata will be set here

另一种选择是直接返回字符串,而不是将其设置在变量中:

private async Task<string> UpdateAsync()
{
try
{
using (var client = new HttpClient())
{
return await client.GetStringAsync(url);
}
}
catch
{
return "Updation failed. Error code:vish42042";
}
}

然后您可以通过以下方式获取数据:

string rawdata = await UpdateAsync();

请注意,这两种方法都要求调用方也是 async 方法。

关于c# - 卡在异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16067097/

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