Linq 系统可观察<;字符串>;到System.IObservable<;System.Collections.Generic.List<;字符串>&燃气轮机;
如何将Linq 系统可观察<;字符串>;到System.IObservable<;System.Collections.Generic.List<;字符串>&燃气轮机;,linq,system.reactive,Linq,System.reactive,如何将System.IObservable转换为System.IObservable 公共静态IObservable GetUrlList(Uri url){ var result=(来自Observable.Return中的请求(GetWebRequest(url,false)) 从可观察的响应。从异步模式( request.BeginGetResponse,request.EndGetResponse)() 从GetUrlCollection(response.ToObservable()中
System.IObservable
转换为System.IObservable
公共静态IObservable GetUrlList(Uri url){
var result=(来自Observable.Return中的请求(GetWebRequest(url,false))
从可观察的响应。从异步模式(
request.BeginGetResponse,request.EndGetResponse)()
从GetUrlCollection(response.ToObservable()中的项
选择项目);
返回结果;
}
这里项目的类型是“字符串列表”。我需要将其转换为IObservable字符串列表
。我如何才能做到这一点?试试这个:
public static IObservable<List<string>> GetUrlList(Uri url)
{
var result = (
from request in Observable.Return(
GetWebRequest(url, false))
from response in Observable.FromAsyncPattern<WebResponse>(
request.BeginGetResponse, request.EndGetResponse)()
from item in GetUrlCollection(response)
.ToObservable()
.ToArray()
select item
.ToList());
return result;
}
公共静态IObservable GetUrlList(Uri url)
{
var结果=(
从可观察的请求返回(
GetWebRequest(url,false))
从可观察的响应。从异步模式(
request.BeginGetResponse,request.EndGetResponse)()
来自GetUrlCollection中的项(响应)
.TooObservable()文件
.ToArray()
选择项
.ToList());
返回结果;
}
我对整个方法唯一关心的是,您的
GetUrlCollection(response)
正在返回一个可枚举项。您真的应该将其编码为返回一个可观察的对象。嗯,我认为是可观察的。Start是您的朋友。你有一堆代码,看起来你是在强制进入可观察的序列,而实际上它们看起来不像
记住,Rx设计用于处理推送数据序列。您似乎有一个1序列,恰好是一个列表。TPL/Task/async非常适合这里
如果您确实想使用Rx,我建议您避免在IEnumable和IObservable之间徘徊。这样做会很快造成恶劣的竞争环境,让下一个开发人员感到困惑
public static IObservable<List<string>> GetUrlList(Uri url)
{
return Observable.Start(()=>
{
var request = GetWebRequest(url, false);
return GetUrlCollection(request);//Code change here??
});
}
公共静态IObservable GetUrlList(Uri url)
{
返回可观察的。开始(()=>
{
var-request=GetWebRequest(url,false);
返回GetUrlCollection(请求);//此处的代码更改??
});
}
在这里,您可以很高兴地在您的可观察的。启动代理同步。对于下一个人来说,这应该更容易理解(即,这是一个以UrlCollection作为值的单值序列)
public static IObservable<List<string>> GetUrlList(Uri url)
{
return Observable.Start(()=>
{
var request = GetWebRequest(url, false);
return GetUrlCollection(request);//Code change here??
});
}