Em este artigo MSDN , o código seguinte exemplo é fornecido (ligeiramente editado por brevidade):
public async Task<ActionResult> Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Department department = await db.Departments.FindAsync(id);
if (department == null)
{
return HttpNotFound();
}
return View(department);
}
O FindAsync
método recupera um Department
objeto por seu ID e retorna a Task<Department>
. Em seguida, o departamento é imediatamente verificado para ver se é nulo. Pelo que entendi, solicitar o valor da tarefa dessa maneira bloqueará a execução do código até que o valor do método esperado seja retornado, efetivamente fazendo desta uma chamada síncrona.
Por que você faria isso? Não seria mais simples chamar o método síncrono Find(id)
, se você vai bloquear imediatamente?
... else return null;
Em seguida, você precisa verificar se o método realmente encontrou o departamento solicitado.