我正在尝试使用RX从WCF下载一些数据。但是Observable.FromAsyncPattern()
使用SelecMany
我试图在下面的代码段中突出显示此问题:
var timer = Observable.Timer(TimeSpan.FromSeconds(1));
var obs = Observable.FromAsyncPattern<PictureFile>(ServiceClient.BeginDownloadFilePreview, ServiceClient.EndDownloadFilePreview);
obs().Subscribe(x => Debug.WriteLine("I am here"));
var result = from _ in timer
from data in obs()
select data;
result.Subscribe(x => Debug.WriteLine("Can't get here :( "));
因此,如果正确理解RX和SelecMany
,上面的代码应该打印:
“我在这里”
“无法到达:(”
然而,它只打印第一行而不是第二行
编辑:忘记提及此代码在没有附加调试器的情况下运行良好,但如果我在没有调试器的情况下运行它会失败
答案 0 :(得分:0)
刚刚找到它!
首先,我不应该吞下异常,即使它是一个测试代码,并且应该记录IObservable报告的所有异常。
其次我从MSUnit测试运行我的项目,当用附加的dubugger运行它时,它影响了WCF绑定的maxReceivedMessageSize(至少看起来像它),所以当我在Debug模式下运行时它全部工作,但是当在没有它的情况下运行一个请求失败了,但我还没有看到它,因为我没有检查OnError消息。
获得的经验教训:始终记录OnError错误消息