Tôi đang tìm cách triển khai một số hành vi điều chỉnh vào một trong các kiểu xem của tôi. Đó là một ứng dụng Silverlight, tuy nhiên tôi không nghĩ điều đó đặc biệt quan trọng.Điều chỉnh/xếp hàng sự kiện - Tiện ích mở rộng phản ứng?
Hãy xem xét một lớp học với ba đặc tính:
- Property1
- Property2
- Property3
Bất cứ khi nào một trong những thuộc tính được cập nhật, làm mới là cần thiết.
private void Refresh()
{
//Call out to the server, do something when it comes back
}
Mục tiêu của tôi là như sau:
- Nếu một Refresh đang diễn ra, chúng tôi lý tưởng nên hủy bỏ các cuộc gọi đến máy chủ, và đưa ra một yêu cầu mới
- Nếu một tài sản được thay đổi, chúng ta nên để lại một số cửa sổ nhỏ thời gian (có lẽ là 0,1 giây), nơi chúng ta chờ đợi những thay đổi bổ sung. Bằng cách này, nếu nhiều thuộc tính được thay đổi nhanh chóng (ví dụ, theo chương trình), chúng tôi không gửi spam máy chủ với các yêu cầu. Sẽ ổn cho cửa sổ thứ hai 0,1 để đặt lại trên mỗi thay đổi, nhưng không bắt buộc.
Nếu có vấn đề, tôi đang sử dụng triển khai ChannelFactory cho cuộc gọi máy chủ.
Tôi có thể sử dụng loại mẫu nào để thực hiện việc này? Đây có phải là một cái gì đó phản ứng mở rộng có thể giúp tôi với?
Edit:
đánh dấu câu trả lời của Paul là chính xác. Trong khi ReactiveUI hiện không hoạt động với Silverlight5, nó nêu rõ các bước tiếp cận/thành phần để giải quyết vấn đề bằng cách sử dụng Rx.
Rx chắc chắn hỗ trợ này, xem http://rxwiki.wikidot.com/101samples#toc29 - về việc hủy nó - hãy nhìn vào CancellationToken từ Nhiệm vụ –