Использование Rx для упрощения асинхронного запроса веб-службы Silverlight
Я написал упрощенную клиентскую библиотеку Silverlight для своего веб-сервиса WCF с использованием Rx, однако иногда замечаю, что пропускаю завершенные события.
public IObservable<XElement> GetReport(string reportName)
{
return from client in Observable.Return(new WebServiceClient())
from request in Observable.ToAsync<string>(client.GetReportDataAsync)(reportName)
from result in Observable.FromEvent<GetReportDataCompletedEventArgs>(client, "GetReportDataCompleted").Take(1)
from close in this.CloseClient(client)
select result.EventArgs.Result;
}
Я считаю, что проблема вызвана тем, что веб-сервис вызывается и возвращается до подписки на завершенное событие. Я не могу понять, как заставить Rx подписаться на событие до вызова Async. Я пробовал StartWith, но для этого нужно, чтобы типы ввода и вывода были одинаковыми, есть идеи?