Di C #, ketika Anda mengganti metode, itu diizinkan untuk membuat menimpa async ketika metode asli tidak. Ini sepertinya bentuk yang buruk.
Contoh yang membawa saya ke sini adalah ini - saya dibawa untuk membantu dengan masalah uji beban. Pada sekitar 500 pengguna secara bersamaan, proses login akan mogok dalam redirect loop. IIS sedang mencatat pengecualian dengan pesan "Modul atau pengendali asinkron selesai sementara operasi asinkron masih tertunda". Beberapa pencarian membuat saya berpikir bahwa seseorang sedang melecehkan async void
, tetapi pencarian cepat saya melalui sumber tidak dapat menemukan apa pun.
Sayangnya, saya sedang mencari 'async \ svoid' (pencarian regex) ketika saya seharusnya mencari sesuatu yang lebih seperti 'async \ s [^ T]' (dengan asumsi Task tidak sepenuhnya memenuhi syarat ... Anda mengerti maksudnya).
Apa yang kemudian saya temukan adalah async override void onActionExecuting(...
di basis controller. Jelas itu yang menjadi masalah, dan memang begitu. Memperbaiki itu (membuatnya sinkron untuk saat ini) menyelesaikan masalah.
Kembali ke pertanyaan: Mengapa oh mengapa Anda dapat menandai override sebagai async ketika kode panggilan tidak pernah bisa menunggu?
Task
.