XML 파일을 변환하여 다른 시스템에로드하는 중입니다.xmlNode.SelectSingleNode는 노드가 변경 되더라도 항상 동일한 값을 반환합니다.
이전에 ThreadPool을 사용하여이 작업을 수행했지만 파일 제공 업체와 구조가 변경되어 이제는 Aysync-Await을 시도하고 이상한 결과가 나타납니다. 나는 파일을 처리하는 것처럼
나는 그 위로 된 XMLNodes 및 루프의 목록을
두 번째를 WriteLine은 항상 첫 번째 노드, 예를 들어, 예상되는 결과를 반환하지만foreach (XmlNode currentVenue in venueNodes)
{
Console.WriteLine(currentVenue.OuterXml);
Console.WriteLine(currentVenue.SelectSingleNode(@"//venueName").InnerText);
}
:
<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