我有这段代码,我写的是使用XDocument.Parse加载XML文件 方法。我基本上需要以5秒的固定间隔读取XML文件。
问题是代码“XDocument.Parse(res.Result)”以及之后的任何内容都没有被执行,即应用程序刚刚完成执行而不处理此代码。
但是,如果我将相同的代码放在任务方法之外,那么它可以正常工作。我尝试过使用XDocument.Load方法并使用Timer但我遇到了同样的问题。
public void starttest()
{
string FilePath = @"C:\Users\maxpayne\Documents\JobSchedule.xml";
Task<string>.Factory.StartNew(() =>LoadFile(FilePath)).ContinueWith((res)=>{
//
XDocument doc = XDocument.Parse(res.Result);
Console.Write(res.Result);
ProcessJob(LoadJob(doc));
UpdateJobs();
Sleep(5000);
}); ;
}
答案 0 :(得分:0)
将加载/解析合并为一个以删除不必要的延续。
public void starttest()
{
Task.Factory.StartNew((state) =>
{
var doc = XDocument.Load((string)state);
ProcessJob(LoadJob(doc));
UpdateJobs();
}, @"C:\Users\maxpayne\Documents\JobSchedule.xml");
}
答案 1 :(得分:0)
您的问题是该文件正在另一个线程上加载,但您不是在等待该任务完成。当ContinueWith
返回时,任务已经启动,但可能尚未完成。
Task<string>.Factory
.StartNew(() => LoadFile(FilePath))
.ContinueWith((res) =>
{
XDocument doc = XDocument.Parse(res.Result);
Console.Write(res.Result);
ProcessJob(LoadJob(doc));
UpdateJobs();
Sleep(5000);
})
.Wait();
当然,如果你正在等待任务完成(这是),你不仅没有更快或者并行做任何事情,你也浪费资源这样做,因为你正在使用两个此操作的线程。