Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 系统可观察<;字符串>;到System.IObservable<;System.Collections.Generic.List<;字符串>&燃气轮机;_Linq_System.reactive - Fatal编程技术网

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??
  });
}