Non è possibile creare AsyncRouteBase, perché le rotte utilizzate da ASP.NET MVC sono sincroni. Devi capire che per poter creare metodi asincroni, qualcuno deve consumarli in modo asincrono, non puoi magicamente rendere tutto asincrono aggiungendo il metodo asincrono.
Il routing non può essere asincrono per vari motivi, le route vengono memorizzate nella cache e vengono create una sola volta al momento dell'esecuzione della prima richiesta. Attenzione, i percorsi vengono memorizzati nella cache, non cambiano e non possono essere modificati in runtime perché vengono eseguiti per primi, se il routing eseguirà chiamate db asincrone, ogni richiesta dovrà attendere che venga soddisfatta la condizione di routing che rallenterà l'intera applicazione .
E in genere non è necessario AsyncRouteBase, ma è possibile creare Async Route Handler.
public class AsyncRouteHandler : IRouteHandler
{
IHttpHandler IRouteHandler.GetHttpHandler(RequestContext requestContext)
{
return new AsyncHttpHandler();
}
}
public class AsyncHttpHandler : HttpTaskAsyncHandler{
public override async Task ProcessRequestAsync(HttpContext context)
{
}
}
Tuttavia, utilizzando MVC conduttura all'interno di questo richiederà un sacco di lavoro, ma si può facilmente ignorare che il servizio e la risposta da qui. Puoi usare controller factory all'interno di questo e creare i tuoi metodi per eseguire ciò che ti serve.
Un'altra alternativa è utilizzare facilmente MEF o altre forme di DI per gestire il codice più grande e richiamare i rispettivi metodi all'interno di AsyncHttpHandler.
fonte
2015-07-26 08:27:47
Quanto tempo impiegherà l'IO? Se è veloce (probabilmente nel routing), non ha senso utilizzare l'IO asincrono (http://stackoverflow.com/questions/25086866/why-does-the-ef-6-tutorial-use-asychronous-calls/25087273) . – usr
Potrebbe essere più chiamate di database con circa 50ms ciascuna. –
OK, probabilmente non ha senso per l'IO asincrono. Comunque, bella domanda. – usr