Trong C #, khi bạn ghi đè một phương thức, nó được phép thực hiện ghi đè không đồng bộ khi phương thức ban đầu không. Đây có vẻ như hình thức nghèo nàn.
Ví dụ đưa tôi đến đây là điều này - tôi đã được đưa vào để hỗ trợ cho vấn đề kiểm tra tải. Với khoảng 500 người dùng đồng thời, quá trình đăng nhập sẽ bị hỏng trong một vòng lặp chuyển hướng. IIS đã ghi nhật ký ngoại lệ với thông báo "Mô-đun hoặc trình xử lý không đồng bộ hoàn thành trong khi hoạt động không đồng bộ vẫn đang chờ xử lý". Một số tìm kiếm khiến tôi nghĩ rằng ai đó đang lạm dụng async void
, nhưng các tìm kiếm nhanh của tôi thông qua nguồn không tìm thấy gì.
Đáng buồn thay, tôi đã tìm kiếm 'async \ svoid' (tìm kiếm regex) khi tôi nên tìm kiếm một cái gì đó giống như 'async \ s [^ T]' (giả sử Nhiệm vụ không đủ điều kiện mà bạn nhận được điểm).
Những gì tôi tìm thấy sau đó là async override void onActionExecuting(...
trong một bộ điều khiển cơ sở. Rõ ràng đó phải là vấn đề, và nó đã được. Sửa nó lên (làm cho nó đồng bộ vào lúc này) đã giải quyết vấn đề.
Quay lại câu hỏi: Tại sao oh tại sao bạn có thể đánh dấu ghi đè là không đồng bộ khi mã cuộc gọi không bao giờ có thể chờ đợi?
Task
.