Tôi đang sử dụng Tiện ích mở rộng phản ứng để xử lý sự kiện dễ dàng trong ViewModels của tôi (ứng dụng Silverlight và/hoặc Wp7). Vì lợi ích của sự đơn giản hãy nói rằng tôi có một dòng như thế này trong ctor của VM của tôi:Làm gì với IObservers đang được xử lý?
Observable.FromEvent<PropertyChangedEventArgs>(
h => MyObject.PropertyChanged += h,
h => MyObject.PropertyChanged -= h)
.Where(e=>e.PropertyName == "Title")
.Throttle(TimeSpan.FromSeconds(0.5))
.Subscribe(e=>{/*do something*/});
này trả về một đối tượng IDisposable, mà nếu xử lý sẽ huỷ đăng ký.(Tôi có đúng trong giả định này không?)
Nếu tôi không có tham chiếu đến nó, sớm hay muộn nó sẽ được thu thập và người xử lý của tôi sẽ bị hủy đăng ký.
Tôi thường có một List<IDisposable>
trong VM của mình và tôi thêm đăng ký vào nó, nhưng tôi cảm thấy dơ bẩn về nó, như thể tôi không làm điều gì đó theo cách Rx chính xác.
Thực tiễn tốt nhất, mẫu được đề xuất trong các tình huống như thế này là gì?
Tôi biết về sự kiện rò rỉ bộ nhớ .NET, nhưng tôi bỏ qua một thực tế rằng nó không quan trọng mà IObservable phân phối các nhà quan sát trên Finalize, bởi vì finalize không được gọi ở đây ... Cảm ơn! – TDaver
Nếu tôi đã chỉ định cách 'IObservable' nên hoạt động và nên được sử dụng, tôi sẽ chỉ định rằng mọi người tiêu dùng viết đúng phải giữ tham chiếu đến một địa chỉ 'IDisposable' được trả lại và triển khai nên tự xem xét (nếu không được khuyến khích) hủy bất kỳ đăng ký nào có liên quan 'IDisposable' đã bị loại khỏi phạm vi. –
supercat