我在aspnet中有这个简单的代码:假设没有异常,也没有文件锁定,也没有进程终止:
new Thread(()=>{
Thread.sleep(15000);
// GC.Collect();
File.Write (...); // dummy file
}).Start();
// GC.Collect();
从我的测试中,文件始终创建。
问题
我不理解的情况是请求生命周期比线程执行短得多,但仍然有效。就这样 。这是我的主要问题
是否始终保证会创建文件?
Nb只是检查行为的一项测试。 此页面也是一个只有此代码的空白页面。我也知道加入会等待
答案 0 :(得分:2)
不是。当IIS决定重新整理整个过程时,它将删除后台和前台线程。请参阅this answer。
幸运的是,你可以确保它们不被打断。您可以通过实现IRegisteredObject
接口告诉ASP.NET有关您的线程的信息。然后,您可以使用HostingEnvironment.RegisterObject
注册您的对象。见The Dangers of Implementing Recurring Background Tasks In ASP.NET
答案 1 :(得分:1)
除非线程被中止或上述语句抛出异常,是的,它将始终被创建(将文件权限和IO问题排除在图片之外)。
线程可能被中止的原因: