问题描述
我正在尝试使用
using (StreamWriter sw = File.AppendText(filePath))
{
sw.WriteLine(n.InnerText);
}
在我认为必须是异步的方法中,因为它正在调用异步方法GetByteArrayAsync()
投票网站功能:
private async void PollSite(string filePath,string siteURL)
{
response = await http.GetByteArrayAsync(siteURL);
source = WebUtility.HtmlDecode(Encoding
.GetEncoding("utf-8")
.GetString(response,response.Length - 1));
result = new HtmlDocument();
result.LoadHtml(source);
gNode = result.GetElementbyId("SoMetable");
using (StreamWriter sw = File.AppendText(filePath))
{
foreach (HtmlNode n in gNode.Descendants("td"))
{
sw.WriteLine(n.InnerText);
}
}
}
尝试写给我错误:
我假设这是由于异步调用引起的,但是不知道如何解决这个问题并实现文件写入-是因为using
语句吗?
解决方法
只需发出信号量并等待。
private readonly SemaphoreSlim _gate = new SemaphoreSlim(1);
private async void PollSite(string filePath,string siteURL)
{
response = await http.GetByteArrayAsync(siteURL);
source = WebUtility.HtmlDecode(Encoding
.GetEncoding("utf-8")
.GetString(response,response.Length - 1));
result = new HtmlDocument();
result.LoadHtml(source);
var gNode = result.GetElementbyId("SomeTable");
await _gate.WaitAsync();
try
{
using (var sw = File.AppendText(filePath))
{
foreach (var n in gNode.Descendants("td"))
{
sw.WriteLine(n.InnerText);
}
}
}
finally
{
_gate.Release();
}
}