In C #, quando si esegue l'override di un metodo, è consentito rendere l'override asincrono quando il metodo originale non lo era. Sembra una forma scadente.
L'esempio che mi ha portato a questo è stato questo: sono stato introdotto per aiutare con un problema di test di carico. Con circa 500 utenti simultanei, il processo di accesso si interromperebbe in un ciclo di reindirizzamento. IIS registrava le eccezioni con il messaggio "Un modulo o gestore asincrono completato mentre un'operazione asincrona era ancora in sospeso". Alcune ricerche mi hanno portato a pensare che qualcuno stesse abusando async void
, ma le mie ricerche rapide attraverso la fonte non hanno trovato nulla.
Purtroppo stavo cercando "async \ svoid" (ricerca regex) quando avrei dovuto cercare qualcosa di più simile a "async \ s [^ T]" (supponendo che Task non fosse pienamente qualificato ... capisci il punto).
Quello che ho scoperto in seguito era async override void onActionExecuting(...
in un controller di base. Chiaramente quello doveva essere il problema, ed era. Risolto il problema (rendendolo sincrono per il momento) risolto il problema.
Torna alla domanda: perché oh perché puoi contrassegnare una sostituzione come asincrona quando il codice chiamante non potrebbe mai aspettarlo?
Task
.