我在尝试从某个目录中删除某些临时文件时收到错误“Thread is aborted”。我认为这个问题特定于下面的代码,因为在代码运行时应用程序池不会被回收(据我所见)。 如果需要3-5秒,下面的代码就会成功运行。但是当文件数量较大时,我会在12或15秒后得到错误。 我认为它不是全局超时等因为有其他线程比这个花费更多的时间,但仍然没有中止。 它可能与I / O操作有关吗? 这是一段代码:
DateTime now = DateTime.Now;
IEnumerable<string> directories = Directory.EnumerateDirectories(_pathOfTempFiles);
directories= directories.Concat(new[] { _pathOfTempFiles });
foreach (string dirPath in directories)
{
DirectoryInfo di = new DirectoryInfo(dirPath);
foreach (FileInfo fi in di.EnumerateFiles())
{
if (now.Subtract(fi.CreationTime).TotalHours >= 2 && !fi.Name.ToLower().Contains("web.config") && !fi.Name.ToLower().Contains("web.confıg"))
{
try
{
fi.Delete();
}
catch (Exception ex)
{
_messages.Add("Exception : " + ex.Message + " ~ " + fi.Name);
}
}
}
}
答案 0 :(得分:0)
疯狂猜测。不确定它没有被回收......你是deleting the files是否会触发应用程序池的设计回收?询问'因为这会导致线程中止...在2-3秒内你可能会侥幸逃脱 - 无论如何应用程序将重新启动,但你不会看到线程中止。在错误的地方进行大规模/冗长的删除可能会引发一系列的回收,从而更有可能发生例外情况。
此外:还有许多设置(如不活动超时等),这可能会让您的应用意外地退出游戏。确保你没有击中它。