繁体   English   中英

多次调用同一方法异步

[英]Calling same method multiple times async

我正在构建一个MVC应用程序,该应用程序遍历包含一些Urls的XML文档,并针对这些URL进行获取。 该文档最多可以包含400多个Urls,因此一次获取一个对用户来说是一个相当大的延迟,因此我希望并行进行。

这是完成我想重构的工作的方法的基本结构

List<CustomObject> finalList = new List<CustomObject>();
// at this point, list is populated with urls
foreach (string url in list)
{
   XmlReader reader = XmlReader.Create(url);
   XmlDocument xmlDoc = new XmlDocument();
   xmlDoc.Load(reader);
   //below method processes the XML and adds it to the List of custom objects
   finalList.AddRange(ProcessXML(xmlDoc));
}

基本上,我想做的是增加一些线程以减少遍历Doc和执行负载所需的时间(显然,这是最耗时的时间)。

有没有一种简单的方法可以节省资源呢? 如果是这样,应该如何组织。 让我知道是否需要更多信息。

        class WorkItem
        {
            public string Uri { get; set; }
            public byte[] Data { get; set; }
        }


        var items = new List<WorkItem>();

        // first do the parsing as you parsing 
        foreach (var urlFound in yourXmlDoc)
        {
            items.Add(new WorkItem{Uri = url});
        }

        // then the actual work itself
        Parallel.ForEach(items, item => {
            item.Data = GetUrlData(item.Uri);
        });

这是什么:
首先,从XML文档获取所有URL,这是您必须做的,因为您没有提供任何有关此信息。
对于找到的每个URL,将创建一个WorkItem实例,其中包含实际的URL / URI,并将其添加到列表中。
然后,使用Parallel.ForEach()完成工作。 看一下匿名方法:GetUrlData(),您也已经实现了该方法。 返回类型将是字节数组或任何其他类型。
这样做的好处是,您不必担心同步访问列表

BTW:
我从未见过有人对XML文件进行多线程分析。 确实不是那么简单,因为它是分层数据结构

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM