【发布时间】:2020-06-21 16:33:49
【问题描述】:
我正在使用Observable.FromAsync 执行IO 操作。我想永远重复此操作。我不明白如何处理异常,对它们做一些事情,然后返回我的循环:
我尝试过的:
IObservable<string> ioObs=Observable.FromAsync<string>([something]); //at each iteration i do an io operation (reading from a socket);
IObservable<string> loop=Observable.Catch(ioObs).Repeat();
loop.Subscribe(
onNext:x=> Console.Writeline($"Message:{x}"),
onCompleted: Console.Writeline("Completed"),
onError: ex=>Console.Writeline($"Error\tReason:{ex.Message}")
);
现在我不明白为什么我的 observable 在第一个异常之后结束。我没有告诉它继续吗。
我想做什么:
- 执行 IO 操作
- 如果抛出返回一些自定义值
- 重复循环
如果我的 observable 是可枚举的,我会想要这种行为:
public IAsyncEnumerable<string> EnumerableBehaviour()
{
while(true)
{
try
{
string data=await ReadAsync(); //the `FromAsync` delegate
yield return data;
}catch(Exception ex)
yield return "Error";
{
}
}
即使OnError 被触发,我如何继续执行Repeat?
Observable.Catch和Observable.Throw应该如何与Observable.Repeat结合?
【问题讨论】:
-
你能处理
[something]里面的异常吗? -
我可以处理它,但出于好奇,它可以通过仅使用
Rx构造在外部处理吗?可以在Error之后构造一个新的Observable吗?如果是这样,Repeat还有意义吗?我可以说myobservable.Catch(myobservable)之类的话吗?
标签: c# observable system.reactive