таймер в ASP.NET
на сервере есть папочка temp, в которую кладутся временные файлы и пользователю выдаётся ссылка на этот файл. но необходимо, чтобы эта ссылка была действительно в течении некоторого времени, а потом файл удалялся из этой папки. Делаю как: запускаю таймер, который должен сработать через некоторое время и убить содержание temp. если открывается всего одна страница с такой временной ссылкой, то все нормал. А если 2, то второй поток (созданный вторым таймером) просто даже не заходит в свою callback функцию. Помогите пожалуйста решить!!!! такое впечатление что второй поток кто-то убивает.
private static Mutex mut=new Mutex();
_timers.Add(new System.Threading.Timer(new TimerCallback(DeleteFileFromTemp), _state, 20000, Timeout.Infinite));
private void DeleteFileFromTemp(object state)
{
mut.WaitOne();
string _tempPath = "";
try
{
_tempPath = (string)state;
File.Delete(_fileName);
Directory.Delete(_tempPath);
}
catch (DirectoryNotFoundException)
{
}
catch (Exception ex)
{
}
mut.ReleaseMutex();
}
-------------------------------
Лучше хранить ссылки на файлы в базе на сервере используя FILESTREAM и джоб написать чтоб ненужные записи удалял из таблицы, где храняться ссылки на файл, тем самым делая файлы недоступными.
Достаточно таблички для этого из трех полей - Id-шник чтоб из базы файлы по запросу отдавать по нему (например в query string его передавая), datetime - чтоб хранить когда файл создан, чтоб джоб знал удалять запись о нем или нет, и сама ссылка на файл...