是否保证一个线程将在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会等待

是否保证一个线程将在aspnet中完成?

不是。当IIS决定回收整个进程时,它将关闭后台和前台线程。请看这个答案

幸运的是,您可以确保它们不被中断。你可以告诉ASP。. NET通过实现IRegisteredObject接口来了解线程。然后您可以使用HostingEnvironment.RegisterObject注册您的对象。参见在ASP中实现重复出现的后台任务的危险。净

除非线程被终止或上述语句抛出异常,否则它将始终被创建(不考虑文件权限和IO问题)。

线程可能中止的原因:

  • (手动)应用程序池回收;
  • 请求废弃;
  • 应用程序崩溃