gpt4 book ai didi

c# - 异步/等待任务没有返回值

转载 作者:行者123 更新时间:2023-12-03 04:22:20 25 4
gpt4 key购买 nike

代码的作用是循环一个 URL 数据网格,检查 html 中的某个字符串并相应地返回数据,到目前为止非常基本。

我试图更好地理解等待/异步方法,到目前为止我已经掌握得相当不错,但我遇到了障碍,到目前为止我拥有的代码:

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 = wait Task.Run (() => { Helpers.GetLinkPlatformType(row.Cells[0].Value.ToString()); });

上面还说:Awaited Task returns no value,但方法 GetLinkPlatformType 确实返回一个值,它不是 void 我不能看看问题是什么,我知道我正在寻找一些东西,但我不完全确定是什么,任何正确方向的帮助将不胜感激。

最佳答案

问题是您的任务没有返回任何内容,您错过了返回

row.Cells[2].Value = await Task.Run(() => { return Helpers.GetLinkPlatformType(row.Cells[0].Value.ToString()); });

否则它只是一个执行某些操作但不返回任何内容的任务。

此外,正如 @leszek 在评论中提到的,这是另一种方法:

row.Cells[2].Value = await Task.Run(() => Helpers.GetLinkPlatformType(row.Cells[0].Value.ToString()) );

希望对你有帮助!

关于c# - 异步/等待任务没有返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62081834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com