如何访问放置在 void 之外的 async void 中的字符串的值

How can I access value of string placed in async void outside that void

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

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 方法可以有以下 return 类型:

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

  • Task,用于执行操作但 return 没有的异步方法 价值.

  • void,对于事件处理程序

在你的例子中,使用 Task<string> 完成 return 字符串而不是 void

的任务
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;
}

但是我建议将上述方法与任务一起使用。