es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo resolver el “Cannot await in the filter expression” en español?

Estoy siguiendo el ejemplo de código de aquí: https://learn.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-6.0&tabs=visual-studio-code

try
{
    await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException) when (!TodoItemExists(id))
{
    return NotFound();
}

En mi código, el método TodoItemExists se llama UserExists y es asíncrono.

Ejemplo de código:

try
{
    await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException) when (!await UserExists(id))
{
    return NotFound();
}

Error: No se puede esperar en la expresión de filtro.

¿Cuál es la manera correcta de escribir esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La forma correcta de escribir esto es mover la llamada async a una línea separada fuera de la expresión de filtro. Esto se puede lograr introduciendo una variable separada para almacenar el resultado de la llamada async y luego usando esa variable en la expresión de filtro. Aquí hay un ejemplo:

    bool existeUsuario = await ExisteUsuario(id);
    try
    {
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateConcurrencyException) when (!existeUsuario)
    {
        return NotFound();
    }
    

    Al hacer esto, evitamos el error de intentar esperar en una expresión de filtro. En su lugar, esperamos la llamada async antes de ingresar al bloque de try-catch y luego usamos el resultado de esa llamada en la expresión de filtro.

Comments are closed.