多请求并行和可观测集合

本文关键字:集合 可观 请求 并行 | 更新日期: 2024-10-23 22:55:35

如何将此任务添加到observableCollection?无论何时循环,它都会替换集合中的项。我希望它循环并存储4个项目,即总共8个项目。然后再次循环并添加另外4个项目,而不是将第一个项目替换为项目。我应该返回照片,但如果我这样做,我会付出努力,因为int和Observable集合之间存在隐含的转换冲突。PS。我仍然喜欢在并行中维护多个请求

private async Task<int> ProcessURL(string url, HttpClient client)
    {
        HttpResponseMessage response = await client.GetAsync(url);
        var responseContent = await response.Content.ReadAsStringAsync();
        HtmlDocument htmlDocument = new HtmlDocument();
        htmlDocument.LoadHtml(responseContent);
        ObservableCollection<Photo> photo = new ObservableCollection<Movie>();
        foreach (var div in htmlDocument.DocumentNode.Descendants().Where(i => i.Name == "div" && i.GetAttributeValue("class", "").StartsWith("ml-item")))
        {
            String image = div.Descendants().Where(i => i.Name == "img").FirstOrDefault().GetAttributeValue("data-original", "");
            photo.Add(new Photo() { Image = image });   
        }
        return something;
    }

多请求并行和可观测集合

根据我对您的问题的理解,您的问题(从示例中假设)是每次调用Process URL时都会创建ObesrvableCollection。因此,为了能够存储来自并行请求的所有照片,您需要将此ObesrableCollection从您的方法中移出,并将其作为私人字段或属性。但是,为了避免从并行请求访问集合时出现同步问题,您需要使用Concurrent Observable collection——您可以在以下主题中找到一个示例:Concurrent Observable collection、Dictionary和Sorted Dictionary

只需从方法中删除ObservableCollection<Photo> photo = new ObservableCollection<Movie>();,并将解析的照片添加到ConcurrentObservableCollection类型的类作用域属性或字段中。

因此,首先您需要从文章中下载源代码,并从中获得ConcurrentObservableCollection类,然后添加到您的项目中。然后将类型:ObservableCollection更改为ConcurrentObservableCollection。在您的ProcessURL中移除ObservableCollection photo=new ObservableCollections();并在最后更改照片。添加(new Photo(){Image=Image});to _photo.Add(new photo(){Image=Image});-所以你将使用你的财产。如果您在完成所有parallel请求后再次尝试使用集合,请不要忘记清理集合。