L'azione può restituire un IHttpActionResult
che esegue l'azione in modo asincrono quando il framework chiama il suo ExecuteAsync
.
Tuttavia, se prima è necessario effettuare altre chiamate asincrone prima di creare e restituire il risultato, è necessario modificare la firma in async Task<IHttpActionResult>
. Questo è tutto.
Se il codice di azione del controller non utilizza await
, è possibile tornare alla firma più semplice. Tuttavia, il risultato che si restituirà sarà ancora asincrono.
Per essere chiari, in entrambi i casi si utilizza codice asincrono.
Il vantaggio è che le prestazioni - a condizione che tutte le chiamate al livello più profondo sono asincrona - un thread del server web non è bloccata durante disco o di rete di I/O, il server può gestire più richieste con un minor numero di risorse.
Pensare attentamente prima di chiamare Wait
o Result
in un'attività o creare un'attività autonomamente all'interno del codice ASP.NET.
Due motivi legittimi a portata di mano-codice, intenzionale multi-threading o il parallelismo per il codice del server web sono:
- quando riceve traffico minimo, ma svolge un lavoro computazionale, una chiamata ogni tanto per eseguire un calcolo su dati e si desidera utilizzare tutti i 16 core.
- quando si effettuano> 1 chiamate simultanee a frammenti di database o altri 1 servizi, si dovrebbe eseguire un'attività per ciascuna query shard in primo piano e attendere tutti.
fonte
2016-08-01 13:10:09
È necessario restituire un 'Task' quando si utilizza la funzione 'async' e' await'. –
Romoku
@Romoku Quindi l'idea è che useresti 'async' ogni volta che avresti bisogno di implementare il threading? Nel contesto dei metodi API Web che eseguono semplici operazioni CRUD, esiste una differenza funzionale tra l'utilizzo di un metodo che restituisce 'IHttpActionResult' vs' Async Task '? –
alex
Utilizzando 'async' ci possono essere miglioramenti delle prestazioni su scala, ma è trascurabile per la maggior parte delle applicazioni web. Non c'è alcuna differenza funzionale tra sincronizzazione e asincronia. – Romoku