我想創建一個可觀察的wcf調用包裝,並創建爲波紋管。可觀察的訂閱未達到完成
的方法是這樣的,
private IObservable<List<string>> Search(string searchTerm)
{
return Observable.Create<List<string>>(o =>
{
var searchClient = new SearchServiceClient();
var s = Observable
.FromEventPattern<SearchCompletedEventArgs>(searchClient, "SearchCompleted");
var subscription = s.Subscribe(
r =>
{
if (r.EventArgs.Error == null)
o.OnNext(r.EventArgs.Result);
else
{
o.OnError(r.EventArgs.Error);
}
},
e =>
{
o.OnError(e);
},
() =>
{
o.OnCompleted();
});
searchClient.SearchAsync(searchTerm);
return subscription;
});
}
和方法調用,
Search("reactive").Subscribe(
r =>
{
MessageBox.Show("Result");
},
e =>
{
MessageBox.Show(e.ToString());
},
() =>
{
MessageBox.Show("Completed");
});
但它永遠不會伸手完成塊。你能建議我要去哪裏嗎?
@Edited 26日
感謝斯托Vučetin,Rarous和李·坎貝爾。我已經測試了所有三個建議,都在工作。但我喜歡Petar的方法使單行代碼成爲可能。即使它看起來Observable.FromAsyncPatterns被depricated。
我認爲最新的位使得FromAsyncPatterns過時了。 – 2013-04-30 00:22:32
我明白了,我仍然瞄準.net 4.0。 – 2013-04-30 03:59:32