【发布时间】: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