[英]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.