如何访问放置在 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;
}
但是我建议将上述方法与任务一起使用。
这是我的代码。我使用 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;
}
但是我建议将上述方法与任务一起使用。