Tengo una acción de búsqueda que tiene dos rutas, una ruta síncrona, que solo devuelve una vista simple, y una ruta asíncrona, que realiza la búsqueda de forma asíncrona y luego devuelve una vista. Ambas son solicitudes GET, por lo que son parte de la misma acción.Usar una acción asíncrona para ejecutar el código síncrono
El problema es que cuando accedo a la acción "localhost: XXXX/Home/Search", la página simplemente carga infinitamente. Usando Fiddler, puedo ver que la solicitud nunca vuelve. Lo he depurado y llega a la última línea de código, pero, una vez más, la solicitud no se completa.
He simplificado las repro a lo siguiente:
public async Task<ActionResult> Search()
{
return View();
}
VS11 me advierte de que el código se ejecutará de forma sincrónica sin esperan, lo cual está bien, pero la solicitud no se completa.
¿Esto debería funcionar? ¿O necesito hacer algo más aquí?
Editar
Esto es MVC 4 focalización .NET 4.5.
Editar 2
Para aquellos que ven las cosas mejor en el código, es por eso que necesito síncrono en una acción asincrónica:
public async Task<ActionResult> Search(string query = null)
{
if (string.IsNullOrWhiteSpace(query))
return View(new SearchViewModel()); // never loads
var model = await _someService.SearchAsync(query);
return View(model); // loads
}
Creo que esto * debería * funcionar, pero por alguna razón no lo hace. Como arroja y atrapa un 'NullReferenceExcpetion' internamente, creo que es un error. – svick
Consejo: asegúrese de heredar de 'AsyncController', no' Controller' si sus métodos de acción están devolviendo una 'Tarea'. –
vcsjones
2 @ vcsjones, lo intenté, pero no ayuda. Y [no debería ser necesario en MVC4] (http://msdn.microsoft.com/en-us/library/system.web.mvc.asynccontroller%28v=vs.108%29.aspx). – svick