这段代码循环遍历一个URL的数据表格,检查HTML中是否包含特定字符串,并根据情况返回数据,目前非常基础。
我正在尝试更好地理解await/async方法,到目前为止我已经有了相当不错的掌握程度,但是我遇到了一个问题,我目前的代码如下:
FormMain.cs
public async Task RunAsyncAnalyzer()
{
try
{
BtnPerformLinkAnalysis.Enabled = false;
if (DataGridViewLinks.Rows.Count > 0)
{
foreach (DataGridViewRow row in DataGridViewLinks.Rows)
{
row.Cells[2].Value = await Task.Run(() => { Helpers.GetLinkPlatformType(row.Cells[0].Value.ToString()); });
}
}
BtnPerformLinkAnalysis.Enabled = true;
}
catch (Exception ex)
{
Helpers.DebugLogging("[" + DateTime.Now + "]-[" + ex.ToString() + "]");
}
}
private async void BtnPerformLinkAnalysis_Click(object sender, EventArgs e)
{
await RunAsyncAnalyzer();
}
Helpers.cs
public static string GetLinkPlatformType(string url) {
string platform_type = "......";
try {
var html = GetWebPageHTML(url);
if (html.Contains("Start the discussion…")) {
platform_type = "DISCUZ|CAN_COMMENT";
}
}
catch (Exception ex)
{
Helpers.DebugLogging("[" + DateTime.Now + "]-[" + ex.ToString() + "]");
}
return platform_type;
}
我遇到的错误是:
无法将类型 'void' 转换为 'object'
,出错代码在这一行: row.Cells[2].Value = await Task.Run(() => { Helpers.GetLinkPlatformType(row.Cells[0].Value.ToString()); });
上方还提示了: 等待的任务没有返回值
,但是 GetLinkPlatformType
方法确实有返回一个值,它不是 void
类型。我不知道问题出在哪里,我知道我可能忽略了什么,但具体是什么我不确定。如果能给予任何帮助或指引,将不胜感激。