Tôi muốn sử dụng Tiện ích mở rộng phản ứng để chuyển đổi một số thư và chuyển tiếp chúng sau một chút chậm trễ.Trì hoãn và hủy trùng lặp bằng cách sử dụng Tiện ích mở rộng phản ứng (Rx)
Các thông điệp giống như thế này:
class InMsg
{
int GroupId { get; set; }
int Delay { get; set; }
string Content { get; set; }
}
Kết quả trông giống như sau:
class OutMsg
{
int GroupId { get; set; }
string Content { get; set; }
OutMsg(InMsg in)
{
GroupId = in.GroupId;
Content = Transform(in.Content); // function omitted
}
}
Có một vài yêu cầu:
- Chiều dài của sự chậm trễ phụ thuộc vào nội dung của tin nhắn.
- Mỗi thư có một GroupId
- Nếu thư mới đi kèm với cùng một GroupId như thư bị trì hoãn đang chờ truyền thì thư đầu tiên sẽ bị hủy và thư thứ hai được truyền sau một khoảng thời gian trễ mới.
Với một Quan sát <InMsg> và một Send chức năng:
IObservable<InMsg> inMsgs = ...;
void Send(OutMsg o)
{
... // publishes transformed messages
}
Tôi hiểu rằng tôi có thể sử dụng Select để thực hiện việc chuyển đổi.
void SetUp()
{
inMsgs.Select(i => new OutMsg(i)).Subscribe(Send);
}
- Làm thế nào tôi có thể áp dụng một thông điệp rõ trì hoãn? (Lưu ý điều này có thể/nên dẫn đến việc không gửi thư theo thứ tự.)
- Làm cách nào để loại bỏ các thư có cùng GroupId?
- Rx có khả năng giải quyết vấn đề này không?
- Có cách nào khác để giải quyết vấn đề này không?
Tôi đã chơi với điều này và nó không hoàn toàn làm những gì tôi mong đợi. Các thuê bao nhận được một "System.Collections.Generic.AnonymousObservable'1 [OutMsg]" – chillitom
Có vẻ như bạn không gọi 'Switch'.Nếu bạn "di chuột qua" 'Chọn' trong Visual Studio, nó sẽ cho bạn biết rằng nó trả về một' IObservable '. Nếu nó trả về 'IObservable >', bạn không gọi Switch –