我讀了一堆的XML文件,轉化他們,到另一個系統加載數據相同的值。xmlNode.SelectSingleNode總是返回即使節點改變
以前我做了這個使用線程池,但文件的供應商,因此,結構發生了變化,所以現在我想Aysync,等待並得到一個奇怪的結果。
當我處理的文件,我得到的將XMLNode和循環名單在他們
foreach (XmlNode currentVenue in venueNodes)
{
Console.WriteLine(currentVenue.OuterXml);
Console.WriteLine(currentVenue.SelectSingleNode(@"//venueName").InnerText);
}
然而第二的WriteLine總是返回預期的第一個節點,例如結果:
<venue venueID="xartrix" lastModified="2012-08-20 10:49:30"><venueName>Artrix</venueName></venue>
Artrix
<venue venueID="xbarins" lastModified="2013-04-29 11:39:07"><venueName>The Barber Institute Of Fine Arts, University Of Birmingham</venueName></venue>
Artrix
<venue venueID="xbirmus" lastModified="2012-11-13 16:41:13"><venueName>Birmingham Museum & Art Gallery</venueName></venue>
Artrix
這裏是完整的代碼:
public async Task ProcessFiles()
{
string[] filesToProcess = Directory.GetFiles(_filePath);
List<Task> tasks = new List<Task>();
foreach (string currentFile in filesToProcess)
{
tasks.Add(Task.Run(()=>processFile(currentFile)));
}
await Task.WhenAll(tasks);
}
private async Task processFile(string currentFile)
{
try
{
XmlDocument currentXmlFile = new XmlDocument();
currentXmlFile.Load(currentFile);
//select nodes for processing
XmlNodeList venueNodes = currentXmlFile.SelectNodes(@"//venue");
foreach (XmlNode currentVenue in venueNodes)
{
Console.WriteLine(currentVenue.InnerXml);
Console.WriteLine(currentVenue.SelectSingleNode(@"//venueName").InnerText);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
顯然我錯過了一些東西,但我可以看不清楚,請問有人能指出來嗎?
沒有理由讓'processFile()''async'。你應該得到一個警告。另外,並行處理文件可能不會給你任何性能改善。 – svick