【问题标题】:Thread was being aborted error while deleting files from file system从文件系统中删除文件时线程被中止错误
【发布时间】:2014-09-29 10:59:44
【问题描述】:

我在尝试从某个目录中删除一些临时文件时收到错误“线程被中止”。我认为这个问题特定于下面的代码,因为在代码运行时应用程序池没有被回收(据我观察)。 如果需要 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);

            }
        }
    }
}

【问题讨论】:

  • 您是在新线程中运行它吗?
  • 发布您收到的完整错误消息。而不是ex.Message,输出ex.ToString()
  • @JimMischelat 这是堆栈跟踪:Microsoft.Win32.Win32Native.DeleteFile(String path) at System.IO.FileInfo.Delete() at ASW_Is.BackGround.DeleteTempData.PRMTakFFbrQkpFBawoM(Object ) at ASW_Is .BackGround.DeleteTempData.deleteTempFiles() deleteTempFiles 是我的代码运行的地方

标签: c# .net multithreading iis io


【解决方案1】:

一个疯狂的猜测。不确定它没有被回收......你是deleting the files,它触发了设计上的应用程序池回收吗?询问'因为这可能导致线程中止......在 2-3 秒内,您可能会逃脱惩罚 - 无论如何都会重新启动应用程序,但您不会看到线程中止。在错误的地方进行大量/冗长的删除可能会触发一系列回收,从而更有可能出现异常。

另外:有许多设置(如不活动超时等),可能会使您的应用意外退出游戏。确保你没有碰到那个。

【讨论】:

    猜你喜欢
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    相关资源
    最近更新 更多