Observable.FromAsyncPattern()被卡住了

时间:2012-02-28 02:19:15

标签: c# system.reactive reactive-programming

我正在尝试使用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,上面的代码应该打印:

“我在这里”

“无法到达:(”

然而,它只打印第一行而不是第二行

编辑:忘记提及此代码在没有附加调试器的情况下运行良好,但如果我在没有调试器的情况下运行它会失败

1 个答案:

答案 0 :(得分:0)

刚刚找到它!

首先,我不应该吞下异常,即使它是一个测试代码,并且应该记录IObservable报告的所有异常。

其次我从MSUnit测试运行我的项目,当用附加的dubugger运行它时,它影响了WCF绑定的maxReceivedMessageSize(至少看起来像它),所以当我在Debug模式下运行时它全部工作,但是当在没有它的情况下运行一个请求失败了,但我还没有看到它,因为我没有检查OnError消息。

获得的经验教训:始终记录OnError错误消息