是否保证一个线程将在aspnet中完成?
本文关键字:aspnet 线程 一个 是否 | 更新日期: 2023-09-27 18:09:46
我在asp.net中有这个简单的代码:假设没有异常,没有文件锁定,也没有进程终止:
new Thread(()=>{
Thread.sleep(15000);
// GC.Collect();
File.Write (...); // dummy file
}).Start();
// GC.Collect();
从我的测试中,文件总是创建。
我不理解的情况是,请求生命周期比线程执行时间短得多,但仍然可以工作。就这些。这是我的主要问题
是否总是保证文件会被创建?
注意,这只是一个检查行为的测试。此外,该页是一个只有此代码的空页。我也知道join会等待
不是。当IIS决定回收整个进程时,它将关闭后台和前台线程。请看这个答案
幸运的是,您可以确保它们不被中断。你可以告诉ASP。. NET通过实现IRegisteredObject
接口来了解线程。然后您可以使用HostingEnvironment.RegisterObject
注册您的对象。参见在ASP中实现重复出现的后台任务的危险。净 除非线程被终止或上述语句抛出异常,否则它将始终被创建(不考虑文件权限和IO问题)。
线程可能中止的原因:
- (手动)应用程序池回收;
- 请求废弃;
- 应用程序崩溃