从文件系统中删除文件时线程被中止错误

时间:2014-08-06 13:21:32

标签: c# .net multithreading iis io

我在尝试从某个目录中删除某些临时文件时收到错误“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);

            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

疯狂猜测。不确定它没有被回收......你是deleting the files是否会触发应用程序池的设计回收?询问'因为这会导致线程中止...在2-3秒内你可能会侥幸逃脱 - 无论如何应用程序将重新启动,但你不会看到线程中止。在错误的地方进行大规模/冗长的删除可能会引发一系列的回收,从而更有可能发生例外情况。

此外:还有许多设置(如不活动超时等),这可能会让您的应用意外地退出游戏。确保你没有击中它。