Tôi đã cố gắng đọc các phương thức không đồng bộ và hiện đang cố gắng tạo phương thức không đồng bộ của riêng mình. Phương thức là một cuộc gọi webservice trả về một danh sách các bản ghi lỗi. Tôi không chắc rằng tôi đã hiểu chính xác vì vậy tôi nghĩ rằng tôi muốn chia sẻ mã của tôi để xem nếu tôi nên làm bất cứ điều gì khác nhau.Tạo phương thức dịch vụ web không đồng bộ
Tất cả những gì tôi muốn làm là trả về danh sách các bản ghi lỗi bằng cách gọi phương thức GetAllErrorLogs(), đó là phương thức được đồng bộ hóa. Vì có thể mất một giây để lấy tất cả các bản ghi lỗi, tôi muốn có cơ hội thực hiện các công cụ khác khi tôi gọi phương thức GetAllErrorLogs(). Đây là mã.
[WebMethod]
public async Task<List<ErrorLog>> GetAllErrorLogs()
{
List<ErrorLog> errorLogs = new List<ErrorLog>();
await System.Threading.Tasks.Task.Run(() => {
errorLogs = ErrorLogRepository.GetAllErrorLogs();
});
if (errorLogs == null)
return new List<ErrorLog>();
return errorLogs;
}
Cảm ơn!
Tôi không thấy nhiều lợi thế sử dụng async/chờ đợi ở phía máy chủ. Bạn chỉ cần sử dụng nhiều chủ đề cho cùng một điều. – I4V
@ I4V: 'async' ở phía máy chủ có thể giảm đáng kể * số lượng chủ đề được sử dụng cho mỗi yêu cầu (giả sử mã tự nhiên không đồng bộ và không giả mạo không đồng bộ như 'Task.Run'). Kết quả là, các máy chủ không đồng bộ có thể mở rộng tốt hơn, thường là theo thứ tự 10-100x. –
Stephan Cleary là chính xác ... Tôi đã tham dự một khóa đào tạo tại một cơ sở microsoft, nơi chúng tôi đã nói rằng chỉ bằng cách đồng bộ hóa tất cả các mã chạy trên máy chủ của bạn, bạn sẽ nhận được tăng công suất lớn cho cùng một phần cứng. Hoàn toàn bởi vì, khi một phương thức đang chờ phản hồi từ một cuộc gọi phụ, luồng chính được giải phóng để đi và thực hiện công việc khác ... tức là đối phó với các yêu cầu web đồng thời khác. Ưu điểm là đa nhiệm. – GPR