如何访问放置在异步void中的字符串的值



这是我的代码。我使用async void从互联网上下载一些数据。我将这些数据存储在名为"Strona"的字符串变量中。我想在async void之外使用"Strona"的值。是否有可能以任何方式返回或访问它?

private async void starthttp()
{
string strona = "";
response = await Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null);
var html = new HtmlDocument();
html.Load(response.GetResponseStream());
var nodes = html.DocumentNode.Descendants("img")
.Where(node => node.GetAttributeValue("alt", "")
.Equals("Celny")).ToList();

foreach (var node in nodes)
{
strona = strona + node.OuterHtml;
}
strona = strona.Replace('"', 'u0027');
strona = strona.Replace("< ", "<");
}

Async方法可以有以下返回类型:

  • Task<TResult>,用于返回值的异步方法。

  • Task,用于执行操作但不返回的异步方法价值

  • void,用于事件处理程序

在您的情况下,对返回字符串而不是无效的任务使用Task<string>

private async Task<string> starthttp()
{
string strona = "";
//your code stuff            
return strona;
}

糟糕的方法是在方法中声明全局变量并为其赋值,因此:

string stronaValue = "";
private async void starthttp()
{
string strona = "";
response = await Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null);
var html = new HtmlDocument();
html.Load(response.GetResponseStream());
var nodes = html.DocumentNode.Descendants("img")
.Where(node => node.GetAttributeValue("alt", "")
.Equals("Celny")).ToList();

foreach (var node in nodes)
{
strona = strona + node.OuterHtml;
}
strona = strona.Replace('"', 'u0027');
strona = strona.Replace("< ", "<");
stronaValue = strona;
}

但是,我建议将上面的方法与Task一起使用。

相关内容

最新更新