异步方法没有调用

时间:2015-01-14 14:55:25

标签: c# .net async-await c#-5.0

调用 awaitMethod() 并不打印console.printlineGetFilmCount()的第二次调用,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);
        });
    }
}

1 个答案:

答案 0 :(得分:4)

你不应该使用async void,除非它是一个UI事件处理程序(似乎不是这种情况)。

这里可能发生的事情是你没有等待awaitMethod完成(你不能因为它是一个void方法)所以你的控制台应用程序在你的代码的其余部分之前结束了有机会执行。

使用async Task代替await(或致电Wait(),如果它在Main中),则返回Task

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

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