簡體   English   中英

異步/等待任務不返回任何值

[英]Async / Await Task returns no value

代碼所做的是循環 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;
        }

我得到的錯誤是: cannot convert type 'void' to 'object' ,它位於這一行: row.Cells[2].Value = await Task.Run(() => { Helpers.GetLinkPlatformType(row.Cells[0].Value.ToString()); });

它還在上面說: Awaited Task returns no value但方法GetLinkPlatformType確實返回一個值,它不是void我看不出問題是什么我知道我正在尋找一些東西但我不完全確定什么,任何幫助正確的方向將不勝感激。

問題是你的任務沒有返回任何東西,你錯過了return

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()) );

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM