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

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

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

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

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

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

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

Edit

Это 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
}

Ответ 1

Это известная ошибка в бета-версии. Процитировать Stephen Toub:

Короткий ответ: в ASP.NET MVC есть известная ошибка в бета-версии .NET 4.5, которая приводит к этой проблеме, когда метод async завершается синхронно. До тех пор, пока исправление не будет доступно, простым решением является добавление "ожидание Task.Yield();" как первая строка асинхронного метода, заставляя его завершать асинхронно. Чтобы это правильно работало, вам также необходимо убедиться, что вы используете новый SynchronizationContext, предоставленный ASP.NET в .NET 4.5, что означает, что у вас есть строка:

<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />

в разделе appSettings вашего файла конфигурации.