是否保证线程将在aspnet中完成?
我在aspnet中有这个简单的代码:假设没有exception,也没有文件锁定或进程终止:
new Thread(()=>{ Thread.sleep(15000); // GC.Collect(); File.Write (...); // dummy file }).Start(); // GC.Collect();
从我的测试中, 始终创建文件。
题
我不理解的情况是请求生命周期比线程执行要短得多,但仍然有效。 就这样 。 这是我的主要问题
是否始终保证将创建文件?
Nb只是检查行为的一个测试。 此页面也是一个只有此代码的空白页面。 我也知道加入会等待
它不是。 当IIS决定重新整理整个过程时,它将删除后台和前台线程。 看到这个答案 。
幸运的是,你可以确保它们不被打断。 您可以通过实现IRegisteredObject
接口告诉ASP.NET有关您的线程的IRegisteredObject
。 然后,您可以使用HostingEnvironment.RegisterObject
注册您的对象。 请参阅ASP.NET中实现重复后台任务的危险
除非线程被中止或上述语句抛出exception,是的,它将始终被创建(将文件权限和IO问题排除在图片之外)。
线程可能被中止的原因:
- (手动)应用程序池循环;
- 要求放弃;
- 应用程序崩溃。
- 使用ASP.NET MVC OutputCache同时根据用户是否经过身份validation来更改View内容
- ASP.NET vNext和EF7中的多个dbContexts
- 每当Web服务中的变量值发生变化时,调用函数/事件或将数据传递给Website(C#)
- 使用Share Api发布到Linkedin
- Asp.net Dropdownlist选择索引更改AND TextChanged事件不火? (C#)
- 如何将List <List >转换为DataTable
- 为什么标签为x = txtName.Text; 受到XSS攻击,这里有什么预防措施?
- 仅使用域和用户名创建WindowsIdentity
- 将参数从silverlight传递到ASP.net