簡體   English   中英

異步方法不調用

[英]Async method not calling

調用awaitMethod()不打印的第二個電話console.printlineGetFilmCount()也不會在最后print語句awaitMethod()被調用。 唯一的輸出是第一次調用GetFilmCount()時的Console.printLine() ()。

我在這里做錯什么了嗎? 無法弄清楚其行為為何如此?

public async void awaitMethod()
{
    int count1 = await GetFilmCount(1);
    int count2 = await GetFilmCount(2);

    Console.WriteLine("Number of films {0}, {1} ", count1,count2 );
}

public async Task<int> GetFilmCount(int count)
{
    Console.WriteLine("Count {0} ", count);

    using (MySqlConnection connection = new MySqlConnection(connectionString))
    { 
        connection.Open();

        MySqlCommand cmd = new MySqlCommand("select sleep(5) ; select count(*) from sakila.film", connection);

        return await cmd.ExecuteScalarAsync().ContinueWith(t => {
            return Convert.ToInt32(t.Result);
        });
    }
}

除非它是UI事件處理程序,否則不應該使用async void (似乎不是這種情況)。

這里可能發生的情況是,您沒有等待awaitMethod完成(您不能等待,因為它是一個void方法),因此您的控制台應用程序在其余代碼有機會執行之前就結束了。

請改用async Taskawait (如果位於Main則調用Wait() )返回返回的Task

public async Task awaitMethod()
{
    int count1 = await GetFilmCount(1);
    int count2 = await GetFilmCount(2);

    Console.WriteLine("Number of films {0}, {1} ", count1,count2 );
}

暫無
暫無

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

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