나는 로컬 파일 시스템에 문자 메시지를 저장하는 헬퍼 클래스가 있습니다. 이 메서드는 Task
개체를 반환하며 정의에 따라 비동기입니다.Rx.Net : 관찰 비동기 이벤트는 indifinitely
나는이 메소드가 호출 될 때 관찰 할 수 있도록하려면, 그래서 지속적으로 그 기반으로 결정을 버퍼의 크기와 길이를 모니터링 할 수 있습니다.
나는 .NET에 대한 반응성 확장을 사용하여이를 구현하기 위해 노력하고 있습니다. 그러나 나는 버퍼에 메시지를 지속적으로들을 수있는 디자인을 생각해 낼 수 없다. 내가 관찰에 가입하는 방법 다음public IObservable<Unit> Receive(InternalMessage message)
{
var observable = FileBuffer.BufferMessage(message.MessageId.ToString(), message, DateTime.UtcNow).ToObservable(); //This returns a Task, which I convert into an Observable
return observable;
}
은 다음과 같습니다 :
IObservable<Unit> receiverObservable = batchHandler.Receive(message);
receiverObservable.Subscribe(
x => Console.WriteLine("On next"),
ex => //TODO,
() => // Completed);
나는 방법 Receive
가 호출 될 때마다 호출 할 가입자를 원하는 아래에 내 현재의 구현입니다. 그러나 AFAIK는 일단이 메서드가 호출되면 관찰 가능 항목이 완료되고 시퀀스가 종료되므로 향후 Receive
에 대한 호출은 수신되지 않습니다.
Rx.Net 라이브러리를 사용하여 내가 관찰 할 수있는 관찰 가능한 패턴을 구현하는 방법, 즉 시퀀스를 열린 상태로 유지하고 비동기 메소드에 결과를 제공하는 방법을 권장 할 수 있습니까?
가 왜 그냥 메시지가 버퍼링 될 때마다 호출됩니다 FileBuffer에서 이벤트를 만든 다음이 이벤트에 가입? – Evk
FileBuffer 코드를 변경할 수있는 권한이 없습니다. BatchHandler 클래스에 이벤트를 추가 할 수는 있지만, Rx를 사용하여 문제를 직접 해결할 수 있는지 확인하고 싶습니다. 시퀀스를 관리하고 제공하는 도구가 앞으로 나에게 도움이 될 수 있습니다. –
BatchHandler에 이벤트를 추가 한 다음 Observable.FromEvent를 사용하여 시퀀스를 만들 수 있습니다. 추가 혜택은 이해하기 쉽고 사용하기 쉬운 이벤트이며 그대로 사용하거나 관찰 가능한 시퀀스를 생성 할 수 있습니다. – Evk