Mam operację wyszukiwania, która ma dwie ścieżki, ścieżkę synchroniczną, która zwraca tylko prosty widok i ścieżkę asynchroniczną, która wykonuje wyszukiwanie asynchronicznie, a następnie zwraca widok. Oba są żądaniami GET, więc są częścią tego samego działania.Używanie akcji asynchronicznej do uruchamiania kodu synchronicznego
Problem polega na tym, że po uzyskaniu dostępu do akcji "localhost: XXXX/Home/Search" strona po prostu ładuje się w nieskończoność. Korzystając z Fiddlera, widzę, że prośba nigdy się nie zwraca. Debugowałem go i przechodzi do ostatniego wiersza kodu, ale ponownie żądanie nie jest kompletne.
Mam uprościła repro na następujące kwestie:
public async Task<ActionResult> Search()
{
return View();
}
VS11 ostrzega mnie, że kod będzie działać synchronicznie bez czekają, co jest w porządku, ale wniosek nie kompletne.
Czy to działa? Czy muszę tu zrobić coś jeszcze?
Edit
To MVC 4 kierowanie .NET 4.5.
Edycja 2
Dla tych, którzy widzą rzeczy lepiej w kodzie, to dlaczego muszę synchronicznych w działaniu asynchronicznym:
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
}
Myślę, że to * powinno * działać, ale z jakiegoś powodu tak nie jest. Ponieważ odrzuca i przechwytuje 'NullReferenceExcpetion' wewnętrznie, myślę, że to błąd. – svick
Wskazówka: Upewnij się, że dziedziczysz z 'AsyncController', a nie' Controller', jeśli Twoje metody działania zwracają 'Task'. –
vcsjones
2 @ vcsjones, próbowałem, ale to nie pomaga. I [to nie powinno być konieczne w MVC4] (http://msdn.microsoft.com/en-us/library/system.web.mvc.asynccontroller%28v=vs.108%29.aspx). – svick