2
SQL 명령을 실행하고 DataTable을 반환하기 위해 비동기 패턴을 사용하려고합니다. 누군가이 문제를 해결하는 방법에 대해 조언을 구할 수 있습니까? 나는 당신이 당신의 호출 스택까지 더 Wait
또는 Result
을 사용하는 의심ExecuteReaderAsync를 사용할 때 교착 상태가 발생합니다.
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;
}
}
}
}
안부, 토마스
서버 연결 시간 초과가 아니라 교착 상태입니까? – bradgonesurfing
교착 상태에 있음을 어떻게 알 수 있습니까? 잘못된 서버에 연결했거나 연결 속도가 느리거나 너무 많은 데이터를 반환했을 수 있습니다. 동기 메서드를 사용하는 경우 메서드가 작동합니까? –
"교착 상태"를 특성화해야합니다. 또한 SQL Server에서 생성 할 수있는 예외이기도합니다. 나는 이것이 진짜 문제라고 생각한다. –