Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果IIS杀死已经获得锁的线程,会发生什么情况?_C#_Multithreading_Iis - Fatal编程技术网

C# 如果IIS杀死已经获得锁的线程,会发生什么情况?

C# 如果IIS杀死已经获得锁的线程,会发生什么情况?,c#,multithreading,iis,C#,Multithreading,Iis,我试图调试一个问题,其中“doStuff”方法阻塞了几个线程。此函数作为承载在IIS上的web应用程序的一部分运行 在IIS的上下文中,是否有可能线程在获得锁后死亡,而其余线程无法获得锁?不可能,但是(并且您的问题中没有太多信息)在处理IIS和ASP.Net时,您必须考虑一个特定的技术问题,“线程敏捷性”,在ASP.Net中,无法保证“开始工作”的线程与“完成工作”的线程是同一个线程,因此,如果您有一些异步调用,例如使用完成端口,您可能会遇到问题。你可以阅读更多关于这个问题的信息:或者只是谷歌一

我试图调试一个问题,其中“doStuff”方法阻塞了几个线程。此函数作为承载在IIS上的web应用程序的一部分运行


在IIS的上下文中,是否有可能线程在获得锁后死亡,而其余线程无法获得锁?

不可能,但是(并且您的问题中没有太多信息)在处理IIS和ASP.Net时,您必须考虑一个特定的技术问题,“线程敏捷性”,在ASP.Net中,无法保证“开始工作”的线程与“完成工作”的线程是同一个线程,因此,如果您有一些异步调用,例如使用完成端口,您可能会遇到问题。你可以阅读更多关于这个问题的信息:或者只是谷歌一下。请检查这是否有帮助:。基本上,当lIS终止一个线程时,会抛出一个ThreadAbortException,这样我们的代码就可以在线程实际关闭之前进行清理。
private static readonly object _accessLock = new object();

private void doStuff()
{
    lock (_accessLock)
    {
        //code
    }
}