Domanda

Ho un'azione di ricerca che ha due percorsi, un percorso sincrono, che restituisce una visione semplice e un percorso asincrono, che fa la ricerca asincrono e quindi restituisce una vista. Entrambi ricevono richieste, quindi fanno parte della stessa azione.

Il problema è che quando accedo all'azione "localhost: xxxx / home / search", la pagina carica infinitamente. Usando Fiddler, posso vedere che la richiesta non torna mai. L'ho debungato e lo rendono all'ultima riga di codice, ma ancora, la richiesta non completa.

Ho semplificato la riproduzione al seguente:

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

VS11 mi avverte che il codice verrà eseguito in modo sincrono senza attendere, che va bene, ma la richiesta non completa.

dovrebbe funzionare? O devo fare qualcos'altro qui?

Modifica

Questo è MVC 4 Targeting .NET 4.5.

Modifica 2

Per coloro che vedono le cose migliori nel codice, questo è il motivo per cui ho bisogno di sincrono in un'azione asincrona:

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
}
.

È stato utile?

Soluzione

Questo è un bug noto nella beta. per citare Stephen toub:

.

La risposta breve è che c'è un bug noto in ASP.NET MVC nella beta .NET 4.5 che si traduce in questo problema quando il metodo ASYNC è stato completato in modo sincrono.Fino a quando non è disponibile una soluzione, una semplice soluzione alternativa è quella di aggiungere "Await Task.yield ();"Come la prima riga del metodo Async, costringendolo a completare in modo asincrono.Per questo funziona correttamente, è inoltre necessario assicurarsi di utilizzare il nuovo SynchronizationContext fornito da ASP.NET in .NET 4.5, il che significa assicurarti di avere la linea:

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

Nella sezione AppSETTISSS del file di configurazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top