使用ExecuteReaderAsync时出现死锁

时间:2013-08-23 07:13:07

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

我正在尝试使用异步模式执行SQL命令并返回DataTable。 有人可以建议如何解决这个问题吗?

这是我的代码:

    private static async Task<DataTable> ExecuteAsync(Connections connection, SqlBuilder sql)
    {
        using (SqlConnection conn = new SqlConnection(GetConnectstring(connection)))
        {
            await conn.OpenAsync();
            using (SqlCommand cmd = new SqlCommand(sql.Query, conn))
            {
                foreach (var parameter in sql.ColumnValues.Where(d => !d.Name.StartsWith("#")))
                {
                    cmd.Parameters.AddWithValue(parameter.Name, parameter.Value);
                }

                //Why am I getting a deadlock when executing the next line?
                using (SqlDataReader reader = await cmd.ExecuteReaderAsync())
                {
                    DataTable dt = new DataTable();
                    dt.Load(reader);
                    return dt;
                }
            }
        }
    }

祝你好运, 托马斯

1 个答案:

答案 0 :(得分:10)

我怀疑您在调用堆栈中使用WaitResult。如果我在我的博客上描述的那样从UI线程调用此causes a deadlock