Dapper QueryAsync Mensaje devuelto tarea cancelada

asynchronous c# dapper

Pregunta

Estoy teniendo un error con el método dapper y async. ¿Qué estoy haciendo mal?

Este es mi código

public Task<IEnumerable<Student>> GetStudentsAsync(int type)
{
    var sql = "[dbo].[StudentController_GetStudents]";

    var students = Connection.QueryAsync<Student>(sql,
        new
        {
            type
        },
        commandType: CommandType.StoredProcedure
    );

    return students;
}

public Task<IEnumerable<Teacher>> GetTeachersAsync(int type)
{
    var sql = "[dbo].[StudentController_GetTeachers]";

    var teachers = Connection.QueryAsync<Teacher>(sql,
        new
        {
            type
        },
        commandType: CommandType.StoredProcedure,
    );

    return teachers;
}


var studentsTask = StudentDao.GetStudentsAsync(type);

var teachersTask = StudentDao.GetTeachersAsync(type);


UpdateStudents(await studentsTask);

UpdateTeachers(await teachersTask);

Tengo un error cuando llamo "await teachersTask", el error de seguimiento de la pila es:

   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Dapper.SqlMapper.<QueryAsync>d__23`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()

¿Alguien puede decirme qué estoy haciendo mal? Quiero ejecutar ambas consultas al mismo tiempo, y luego esperar el resultado. Sé que algo con conexión SQL no está abierto o algo así, pero no sé cómo solucionarlo.

Gracias por adelantado.

Respuesta aceptada

Use este método privado para abrir una conexión con SQL, y use GetStudents para obtener a los estudiantes y lo mismo aplica para los maestros.

    private SqlConnection GetConnection()
    {
        return new SqlConnection("ConnectionString");
    }

    public async Task<IEnumerable<Student>> GetStudentsAsync(int type)
    {
        using (var connection = GetConnection())
        {  
            DynamicParameters param = new DynamicParameters();
                param.Add("@type", type);
            var result = await connection.QueryAsync<Student>("[dbo].[StudentController_GetStudents]",param, commandType: CommandType.StoredProcedure);
            return result.ToList();
        }
    }

  public async Task<IEnumerable<Teacher>> GetTeachersAsync(int type)
    {
        using (var connection = GetConnection())
        {  
            DynamicParameters param = new DynamicParameters();
                param.Add("@type", type);
            var result = await connection.QueryAsync<Student>("[dbo].[StudentController_GetTeachers]",param, commandType: CommandType.StoredProcedure);
            return result.ToList();
        }
    }

UpdateStudents(await StudentDao.GetStudentsAsync(type));

UpdateTeachers(await StudentDao.GetTeachersAsync(type));


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué