Tôi có một lớp học,Tạo một wrapper thể quan sát được cho một tổ chức phi chủ đề lớp an toàn
public class Test
{
public int Calc();
}
mà yêu cầu tất cả các cuộc gọi đến Calc được thực hiện trên các chủ đề tương tự như một trong những ngày mà thử nghiệm đã được tạo ra. Tôi cần tạo Test một lần (hoạt động tốn kém) và gọi Calc nhiều lần.
Tôi muốn có một wrapper mà sẽ cho phép tôi gọi Calc asynchronousely:
public class TestWrapper
{
private Test _test;
public IObservable<int> Calc();
}
Một cách để làm điều đó sẽ tạo ra một BackgroundWorker hoặc một chủ đề và sử dụng nó như là một sự đảm bảo rằng tất cả các hoạt động vào Kiểm tra nằm trên cùng một chuỗi. Để đơn giản, chúng ta có thể giả định rằng tất cả các cuộc gọi đến Calc() sẽ được thực thi tuần tự, do đó không cần phải lo lắng về việc xếp hàng.
Có cách nào RX thanh lịch hơn để làm điều đó không?
Cảm ơn, EventLoopScheduler là chìa khóa để sắp xếp các cuộc gọi đến cùng một chuỗi. Tuy nhiên, câu trả lời này không giải thích làm thế nào để chuyển đổi từ TestWrapper.Calc mà sẽ được thực hiện trên thread UI để test.Calc ... –
@Sergey - Cập nhật dựa trên ý kiến của bạn –
Điều này gần hơn ... Phần thiếu là bạn không tạo _test (nên được thực hiện trên EventLoopScheduler). Hmm ... Khó quyết định - bạn là người đầu tiên có EventLoopScheduler nhưng @enigmativity đã cung cấp câu trả lời đúng. Cảm ơn các bạn cả hai đều đá! –