从方法和其他方法创建IObservable(Create an IObservable from a method and others)

编程入门 行业动态 更新时间:2024-10-27 23:18:07
方法和其他方法创建IObservable(Create an IObservable from a method and others)

下面的代码是否正确编写以返回Rx库方面的IObservable? 它似乎工作正常,但想知道我正确使用它。

private IObservable<SearchResult[]> Search(string query) { return Observable.Create((IObserver<SearchResult[]> observer)=> { List<SearchResult> result = new List<SearchResult>(); foreach (TestsGroupMeta group in Engine.Groups) { string name = group.ToString(); if (name.IndexOf(query, StringComparison.InvariantCultureIgnoreCase) != -1) { result.Add(new SearchResult{ Name = name, Type = "Group"}); } foreach (TestMethodMeta method in group.Methods) { name = method.ToString(); if (name.IndexOf(query, StringComparison.InvariantCultureIgnoreCase) != -1) { result.Add(new SearchResult {Name = name, Type = "Method"}); } } } observer.OnNext(result.ToArray()); observer.OnCompleted(); return () => {}; }); }

用法是这样的。

private void SearchForm_Load(object sender, EventArgs e) { var textChanged = Observable.FromEventPattern<EventArgs>(txtQuery, "TextChanged") .Select(_ => ((TextBox)_.Sender).Text); var searchResult = from query in textChanged where query.Length >= 3 from result in Search(query) select result; _resultsWatcher = searchResult .Throttle(TimeSpan.FromMilliseconds(200)) .ObserveOn(lvResults) .Subscribe(resuts => { lvResults.BeginUpdate(); lvResults.Items.Clear(); foreach (SearchResult result in resuts) { ListViewItem item = new ListViewItem(result.Name); item.SubItems.Add(result.Type); lvResults.Items.Add(item); } lvResults.EndUpdate(); }); }

另外,有没有办法从这种方法创建一个IObservable?

Task<List<SearchResult>> Search(string query){...}

或者,在大型数据集上创建异步搜索并从中获取IObservable的其他方法是什么。

谢谢

Is the code below correctly written to return an IObservable in terms of Rx library? It seems to work correct, but wondering I'm using it correctly.

private IObservable<SearchResult[]> Search(string query) { return Observable.Create((IObserver<SearchResult[]> observer)=> { List<SearchResult> result = new List<SearchResult>(); foreach (TestsGroupMeta group in Engine.Groups) { string name = group.ToString(); if (name.IndexOf(query, StringComparison.InvariantCultureIgnoreCase) != -1) { result.Add(new SearchResult{ Name = name, Type = "Group"}); } foreach (TestMethodMeta method in group.Methods) { name = method.ToString(); if (name.IndexOf(query, StringComparison.InvariantCultureIgnoreCase) != -1) { result.Add(new SearchResult {Name = name, Type = "Method"}); } } } observer.OnNext(result.ToArray()); observer.OnCompleted(); return () => {}; }); }

The usage is like this.

private void SearchForm_Load(object sender, EventArgs e) { var textChanged = Observable.FromEventPattern<EventArgs>(txtQuery, "TextChanged") .Select(_ => ((TextBox)_.Sender).Text); var searchResult = from query in textChanged where query.Length >= 3 from result in Search(query) select result; _resultsWatcher = searchResult .Throttle(TimeSpan.FromMilliseconds(200)) .ObserveOn(lvResults) .Subscribe(resuts => { lvResults.BeginUpdate(); lvResults.Items.Clear(); foreach (SearchResult result in resuts) { ListViewItem item = new ListViewItem(result.Name); item.SubItems.Add(result.Type); lvResults.Items.Add(item); } lvResults.EndUpdate(); }); }

Also, Is there a way to create an IObservable from such a method?

Task<List<SearchResult>> Search(string query){...}

Or, what would be other approaches to create an asynchronous search over a large dataset and have an IObservable from it.

Thx

最满意答案

你可以从任务中创建一个observable,

Task<List<SearchResult>> SearchAsync(string query){...} var observable = Observable.FromAsync<List<SearchResult>>(()=> SearchAsync(query));

如果您的函数将来只返回1个结果,请考虑使用Task吗?

public async Task<SearchResult[]> SearchAsync(string query){ }

you can create an observable from task as such,

Task<List<SearchResult>> SearchAsync(string query){...} var observable = Observable.FromAsync<List<SearchResult>>(()=> SearchAsync(query));

If your function is returning just 1 result in the future consider using Task instead?

public async Task<SearchResult[]> SearchAsync(string query){ }

更多推荐

本文发布于:2023-07-08 00:56:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1070172.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:方法   IObservable   method   Create

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!