Tôi đang tạo thư viện Ghi nhật ký lưu trữ mọi thứ trên bảng Azure. Viết vào bảng đó rõ ràng là mất rất nhiều thời gian (không bao giờ hơn 1 giây, nhưng nó vẫn còn quá nhiều điều để làm cho sự chờ đợi người dùng), vì vậy phương pháp Log trả về một trường hợp LogResult, đây là lớpNgăn IIS thực hiện nhiệm vụ trước khi kết thúc
public class LogResult
{
public string Id { get; set; }
public Task LoggingTask { get; set; }
public LogResult(string id, Task task)
{
Id = id;
LoggingTask = task;
}
}
Và đây là cách thức phương thức Đăng nhập kết thúc
return new LogResult(id, Task.Factory.StartNew(() =>
DoLogInAzure(account, id, exception, request))
);
Để cung cấp cho người gọi tùy chọn chờ đợi hoàn thành (nếu đó là ứng dụng bảng điều khiển). Vấn đề tôi phải đối mặt là IIS không nên chờ cho nó trước khi trả lại cho người dùng phản hồi ... và nếu tôi không chờ đợi, IIS không luôn thực hiện nhiệm vụ. Ý tưởng là để hiển thị cho người dùng một thông báo "... Nếu bạn liên hệ với chúng tôi, hãy chắc chắn đề cập đến số vấn đề của bạn, XXX" và không làm cho anh ta đợi cho đến khi mục nhập nhật ký được viết.
Có cách nào để buộc IIS đợi cho đến khi tác vụ kết thúc, ngay cả sau khi nó trả về phản hồi? Tôi nghĩ rằng tôi có thể cần phải mã một dịch vụ Windows mà có yêu cầu không đồng bộ, nhưng nó trông giống như rất nhiều công việc chỉ để thêm một mục đăng nhập ... đặc biệt nếu tôi có thể lực lượng IIS chờ đợi cho nó.
Cảm ơn mọi ý tưởng!
Tôi đã nghe rằng IIS khởi động lại 'trang web' chiếm quá nhiều bộ nhớ ... –
Tôi hiểu :) tuy nhiên, tôi không nghĩ đó là trường hợp của tôi, như thể tôi đợi nhiệm vụ kết thúc, IIS hoàn thành thực thi và mục nhật ký được viết 100% số lần – g3rv4
Như một giải pháp thay thế, bạn có thể sử dụng hàng đợi xanh để đăng nhập. Sau đó, một trình xử lý tin nhắn riêng biệt có thể ghi một cách không đồng bộ vào bảng màu xanh. Tốt hơn, nếu bạn nhận được một lỗi xử lý tin nhắn vẫn còn trên hàng đợi và sẽ được xử lý lại sau. –