Использование асинхронного действия для запуска синхронного кода

У меня есть действие поиска, которое имеет два пути: синхронный путь, который просто возвращает простое представление, и асинхронный путь, который выполняет поиск асинхронно, а затем возвращает представление. Оба являются запросами GET, поэтому они являются частью одного и того же действия.

Проблема в том, что когда я обращаюсь к действию "localhost:XXXX/Home/Search", страница просто бесконечно загружается. Используя Fiddler, я вижу, что запрос никогда не возвращается. Я отладил его, и он доходит до последней строки кода, но опять же, запрос не выполняется.

Я упростил воспроизведение до следующего:

public async Task<ActionResult> Search() 
{ 
    return View(); 
} 

VS11 предупреждает меня, что код будет выполняться синхронно без ожидания, что нормально, но запрос не завершается.

Должно ли это работать? Или мне нужно сделать что-то еще здесь?

Редактировать

Это MVC 4, нацеленный на .NET 4.5.

Редактировать 2

Для тех, кто лучше видит код в коде, вот почему мне нужен синхронный в асинхронном действии:

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
}
14
задан Leniel Maccaferri 4 October 2012 в 03:31
поделиться