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