Иногда, если наш файловый сервер работает медленно и страница не завершается по тайм-ауту, ASP.Net выдает исключение ThreadAbortException. Если это происходит внутри Win32Native.CreateFile, дескриптор файла остается заблокированным до тех пор, пока мы не выполним iisreset.
Является ли это недостатком .NET? Можем ли мы что-нибудь сделать с этим, за исключением плохих идей, таких как увеличение времени ожидания до какого-то гигантского числа... Я не думаю, что ThreadAbort.Reset поможет, потому что ущерб уже нанесен, и я даже не вернул дескриптор файла из FileStream, чтобы закрыть его самостоятельно.
в Microsoft.Win32.Win32Native.CreateFile (String lpFileName, Int32 dwDesiredAccess, FileShare dwShareMode, SECURITY_ATTRIBUTES securityAttrs, FileMode dwCreationDisposition, Int32 dwFlagsAndAttributes, IntPtr hTemplateFile)
в Microsoft.Win32.Win32Native.SafeCreateFile (String lpFileName, Int32 dwDesiredAccess, FileShare dwShareMode, SECURITY_ATTRIBUTES securityAttrs, FileMode dwCreationDisposition, Int32 dwFlagsAndAttributes, IntPtr hTemplateFile)
в System.IO.FileStream.Init (путь String, режим FileMode, доступ к FileAccess, права Int32, логическое значение useRights, общий доступ к FileShare, размер буфера Int32, параметры FileOptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, логическое значение bFromProxy, логическое значение useLongPath)
в System.IO.FileStream..ctor (путь String, режим FileMode, доступ к FileAccess, общий ресурс FileShare, размер буфера Int32, параметры FileOptions, String msgPath, логическое значение bFromProxy)
в System.IO.FileStream..ctor (путь строки, режим FileMode)