title: A thorny IIS deadlock caused by Autofac
body: <p>I am a Autofac user, now face a very headache problem. I have been asked this question by Email Alex and Travis, and got their reply, here, thank them for their help.
  To thoroughly check this problem, I accepted the recommendations of Travis, published  the details here.</p>
  
  <p><strong>My Email:</strong></p>
  
  <blockquote>
    <p>We use Autofac 2.6.3.862 in a mvc3 project .</p>
    
    <p>Now we come to the IIS deadlock problem is serious, the server often
    hanging, we have used the Microsoft Debug Diagnostics Tool to do the
    analysis (leads to enclose the analysis report ), initially suspected
    to be a lock in LifetimeScope </p>
    
    <p>I have read your article, but for some technical details are vague to
    me. Most of our Register() component is SingleInstance, so when
    Resolve() I doesn't use a a child lifetime scope like using (var scope
    = Container.BeginLifetimeScope())</p>
    
    <p>, do not know whether this is the reasons of deadlock.</p>
  </blockquote>
  
  <p><strong>Debug Diagnostics analysis report</strong></p>
  
  <pre><code>The following threads in 
  w3wp.exe__hg__PID__3904__Date__03_07_2013__Time_11_01_07AM__974__Manual Dump.dmp are waiting to enter a .NET Lock which thread 39 is currently holding    
  ( 26 34 42 43 44 45 46 47 48 )    
  16.67% of threads blocked    
  
  ======================================================================================
  
  Detected possible blocking or leaked critical section at 0x0e758a00 owned by thread 26 in w3wp.exe__hg__PID__3904__Date__03_07_2013__Time_11_01_07AM__974__Manual Dump.dmp 
  
  Impact of this lock    
  1.85% of threads blocked
  
  (Threads 39)
  
  The following functions are trying to enter this critical section
  
  clr!UnsafeEEEnterCriticalSection+1c    
  
  The following module(s) are involved with this critical section
  
  C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
  
  ======================================================================================
  
  Thread 26 - System ID 7628
  Entry point   0x00000000 
  Create time   2013/3/7 10:44:15 
  Time spent in user mode   0 Days 00:00:00.218 
  Time spent in kernel mode   0 Days 00:00:00.343 
  
  
  
  
  This thread is waiting to enter a .NET Lock which thread 39 is currently holding
  
  
  
  .NET Call Stack
  
  
  
  Function 
  System.Threading.Monitor.ReliableEnter(System.Object, Boolean ByRef) 
  System.Threading.Monitor.Enter(System.Object, Boolean ByRef) 
  Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(Autofac.Core.IComponentRegistration, System.Collections.Generic.IEnumerable`1) 
  Autofac.Core.Container.ResolveComponent(Autofac.Core.IComponentRegistration, System.Collections.Generic.IEnumerable`1) 
  Autofac.ResolutionExtensions.TryResolveService(Autofac.IComponentContext, Autofac.Core.Service, System.Collections.Generic.IEnumerable`1, System.Object ByRef) 
  Autofac.ResolutionExtensions.ResolveService(Autofac.IComponentContext, Autofac.Core.Service, System.Collections.Generic.IEnumerable`1) 
  Autofac.ResolutionExtensions.Resolve[[System.__Canon, mscorlib]](Autofac.IComponentContext, System.Collections.Generic.IEnumerable`1) 
  Autofac.ResolutionExtensions.Resolve[[System.__Canon, mscorlib]](Autofac.IComponentContext) 
  Tunynet.DIContainer.Resolve[[System.__Canon, mscorlib]]() 
  Spacebuilder.Common.ProfileRepository..cctor() 
  Spacebuilder.Common.ProfileRepository..ctor() 
  Spacebuilder.Common.UserProfileService..ctor() 
  Spacebuilder.Common.User.get_Profile() 
  ASP._Page_Themes_Channel_Default_Views_FindUser__QuickSearch_cshtml.Execute() 
  System.Web.WebPages.WebPageBase.ExecutePageHierarchy() 
  System.Web.Mvc.WebViewPage.ExecutePageHierarchy() 
  Tunynet.UI.ThemedWebViewPage.ExecutePageHierarchy() 
  System.Web.WebPages.WebPageBase.ExecutePageHierarchy(System.Web.WebPages.WebPageContext, System.IO.TextWriter, System.Web.WebPages.WebPageRenderingBase) 
  Tunynet.UI.ThemedRazorView.RenderView(System.Web.Mvc.ViewContext, System.IO.TextWriter, System.Object) 
  System.Web.Mvc.BuildManagerCompiledView.Render(System.Web.Mvc.ViewContext, System.IO.TextWriter) 
  System.Web.Mvc.ViewResultBase.ExecuteResult(System.Web.Mvc.ControllerContext) 
  System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(System.Web.Mvc.ControllerContext, System.Web.Mvc.ActionResult) 
  System.Web.Mvc.ControllerActionInvoker+&lt;&gt;c__DisplayClass1c.b__19() 
  System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(System.Web.Mvc.IResultFilter, System.Web.Mvc.ResultExecutingContext, System.Func`1) 
  System.Web.Mvc.ControllerActionInvoker+&lt;&gt;c__DisplayClass1c+&lt;&gt;c__DisplayClass1e.b__1b() 
  System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(System.Web.Mvc.IResultFilter, System.Web.Mvc.ResultExecutingContext, System.Func`1) 
  System.Web.Mvc.ControllerActionInvoker+&lt;&gt;c__DisplayClass1c+&lt;&gt;c__DisplayClass1e.b__1b() 
  System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(System.Web.Mvc.IResultFilter, System.Web.Mvc.ResultExecutingContext, System.Func`1) 
  System.Web.Mvc.ControllerActionInvoker+&lt;&gt;c__DisplayClass1c+&lt;&gt;c__DisplayClass1e.b__1b() 
  System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(System.Web.Mvc.IResultFilter, System.Web.Mvc.ResultExecutingContext, System.Func`1) 
  System.Web.Mvc.ControllerActionInvoker+&lt;&gt;c__DisplayClass1c+&lt;&gt;c__DisplayClass1e.b__1b() 
  System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(System.Web.Mvc.ControllerContext, System.Collections.Generic.IList`1, System.Web.Mvc.ActionResult) 
  System.Web.Mvc.ControllerActionInvoker.InvokeAction(System.Web.Mvc.ControllerContext, System.String) 
  System.Web.Mvc.Controller.ExecuteCore() 
  System.Web.Mvc.ControllerBase.Execute(System.Web.Routing.RequestContext) 
  System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(System.Web.Routing.RequestContext) 
  System.Web.Mvc.MvcHandler+&lt;&gt;c__DisplayClass6+&lt;&gt;c__DisplayClassb.b__5() 
  System.Web.Mvc.Async.AsyncResultWrapper+&lt;&gt;c__DisplayClass1.b__0() 
  System.Web.Mvc.Async.AsyncResultWrapper+&lt;&gt;c__DisplayClass8`1[[System.Web.Mvc.Async.AsyncVoid, System.Web.Mvc]].b__7(System.IAsyncResult) 
  System.Web.Mvc.Async.AsyncResultWrapper+WrappedAsyncResult`1[[System.Web.Mvc.Async.AsyncVoid, System.Web.Mvc]].End() 
  System.Web.Mvc.MvcHandler+&lt;&gt;c__DisplayClasse.b__d() 
  System.Web.Mvc.SecurityUtil.b__0(System.Action) 
  System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(System.Action) 
  System.Web.Mvc.MvcHandler.EndProcessRequest(System.IAsyncResult) 
  System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(System.IAsyncResult) 
  System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
  System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef) 
  System.Web.HttpApplication+PipelineStepManager.ResumeSteps(System.Exception) 
  System.Web.HttpApplication.BeginProcessRequestNotification(System.Web.HttpContext, System.AsyncCallback) 
  System.Web.HttpRuntime.ProcessRequestNotificationPrivate(System.Web.Hosting.IIS7WorkerRequest, System.Web.HttpContext) 
  System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32) 
  System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32) 
  DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, System.Web.RequestNotificationStatus ByRef) 
  System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr, System.Web.RequestNotificationStatus ByRef) 
  System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32) 
  System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32) 
  
  
  Full Call Stack
  
  
  
  Function   Source 
  ntdll!KiFastSystemCallRet    
  ntdll!NtWaitForMultipleObjects+c    
  KERNELBASE!WaitForMultipleObjectsEx+100    
  kernel32!WaitForMultipleObjectsExImplementation+e0    
  clr!WaitForMultipleObjectsEx_SO_TOLERANT+56    
  clr!Thread::DoAppropriateAptStateWait+4d    
  clr!Thread::DoAppropriateWaitWorker+17d    
  clr!Thread::DoAppropriateWait+60    
  clr!CLREvent::WaitEx+106    
  clr!CLREvent::Wait+19    
  clr!AwareLock::EnterEpilogHelper+a8    
  clr!AwareLock::EnterEpilog+42    
  clr!AwareLock::Enter+5f    
  clr!AwareLock::Contention+228    
  clr!JITutil_MonReliableContention+e8    
  System.Threading.Monitor.Enter(System.Object, Boolean ByRef)    
  clr!CallDescrWorker+33    
  clr!CallDescrWorkerWithHandler+8e    
  clr!DispatchCallBody+20    
  clr!DispatchCallDebuggerWrapper+75    
  clr!DispatchCallNoEH+53    
  clr!MethodTable::RunClassInitEx+f1    
  clr!MethodTable::DoRunClassInitThrowing+53e    
  clr!MethodDesc::DoPrestub+f1    
  clr!PreStubWorker+12c    
  0x00f80842    
  clr!MethodTable::GetRestoredSlot+2a    
  clr!MethodDesc::GetMethodEntryPoint+4e    
  clr!MethodDesc::DoPrestub+51d    
  clr!PreStubWorker+15d    
  0x00f80842    
  System.Web.WebPages.WebPageBase.ExecutePageHierarchy()    
  System.Web.Mvc.WebViewPage.ExecutePageHierarchy()    
  System.Collections.Generic.Stack`1[[System.__Canon, mscorlib]].Push(System.__Canon)    
  System.Web.WebPages.WebPageBase.ExecutePageHierarchy(System.Web.WebPages.WebPageContext, System.IO.TextWriter, System.Web.WebPages.WebPageRenderingBase)    
  System.RuntimeType+ActivatorCacheEntry..ctor(System.Type, System.RuntimeMethodHandleInternal, Boolean)    
  System.Web.Mvc.BuildManagerCompiledView.Render(System.Web.Mvc.ViewContext, System.IO.TextWriter)    
  System.Web.Mvc.ViewResultBase.ExecuteResult(System.Web.Mvc.ControllerContext)    
  System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(System.Web.Mvc.ControllerContext, System.Web.Mvc.ActionResult)    
  System.Web.Mvc.ControllerActionInvoker+&lt;&gt;c__DisplayClass1c.&lt;InvokeActionResultWithFilters&gt;b__19()    
  System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(System.Web.Mvc.IResultFilter, System.Web.Mvc.ResultExecutingContext, System.Func`1&lt;System.Web.Mvc.ResultExecutedContext&gt;)    
  System.Web.Mvc.ControllerActionInvoker+&lt;&gt;c__DisplayClass1c+&lt;&gt;c__DisplayClass1e.&lt;InvokeActionResultWithFilters&gt;b__1b()    
  System.Web.Mvc.ControllerActionInvoker+&lt;&gt;c__DisplayClass1c+&lt;&gt;c__DisplayClass1e.&lt;InvokeActionResultWithFilters&gt;b__1b()    
  System.Web.Mvc.ControllerActionInvoker+&lt;&gt;c__DisplayClass1c+&lt;&gt;c__DisplayClass1e.&lt;InvokeActionResultWithFilters&gt;b__1b()    
  System.Web.Mvc.ControllerActionInvoker+&lt;&gt;c__DisplayClass1c+&lt;&gt;c__DisplayClass1e.&lt;InvokeActionResultWithFilters&gt;b__1b()    
  System.Web.Mvc.ControllerActionInvoker.InvokeAction(System.Web.Mvc.ControllerContext, System.String)    
  System.Web.Mvc.Controller.ExecuteCore()    
  System.Web.Mvc.ControllerBase.Execute(System.Web.Routing.RequestContext)    
  System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(System.Web.Routing.RequestContext)    
  System.Web.Mvc.MvcHandler+&lt;&gt;c__DisplayClass6+&lt;&gt;c__DisplayClassb.&lt;BeginProcessRequest&gt;b__5()    
  System.Web.Mvc.Async.AsyncResultWrapper+&lt;&gt;c__DisplayClass1.&lt;MakeVoidDelegate&gt;b__0()    
  System.Web.Mvc.MvcHandler+&lt;&gt;c__DisplayClasse.&lt;EndProcessRequest&gt;b__d()    
  System.Web.Mvc.SecurityUtil.&lt;GetCallInAppTrustThunk&gt;b__0(System.Action)    
  System.Web.Mvc.MvcHandler.EndProcessRequest(System.IAsyncResult)    
  System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(System.IAsyncResult)    
  System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()    
  System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef)    
  System.Web.HttpApplication+PipelineStepManager.ResumeSteps(System.Exception)    
  System.Web.HttpApplication.BeginProcessRequestNotification(System.Web.HttpContext, System.AsyncCallback)    
  System.Web.HttpRuntime.ProcessRequestNotificationPrivate(System.Web.Hosting.IIS7WorkerRequest, System.Web.HttpContext)    
  System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32)    
  System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32)    
  webengine4!W3_MGD_HANDLER::ProcessNotification+5b    
  webengine4!W3_MGD_HANDLER::DoWork+250    
  webengine4!RequestDoWork+2da    
  webengine4!CMgdEngHttpModule::OnExecuteRequestHandler+1a    
  iiscore!NOTIFICATION_CONTEXT::RequestDoWork+128    
  iiscore!NOTIFICATION_CONTEXT::CallModulesInternal+305    
  iiscore!NOTIFICATION_CONTEXT::CallModules+28    
  iiscore!W3_CONTEXT::DoStateRequestExecuteHandler+36    
  iiscore!W3_CONTEXT::DoWork+d7    
  iiscore!W3_MAIN_CONTEXT::ContinueNotificationLoop+1f    
  iiscore!W3_MAIN_CONTEXT::ProcessIndicateCompletion+1f    
  iiscore!W3_CONTEXT::IndicateCompletion+75    
  webengine4!W3_MGD_HANDLER::IndicateCompletion+3d    
  webengine4!MgdIndicateCompletion+24    
  DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, System.Web.RequestNotificationStatus ByRef)    
  System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32)    
  System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32)    
  clr!UM2MThunk_WrapperHelper+10    
  clr!UM2MThunk_Wrapper+8c    
  clr!Thread::DoADCallBack+f0    
  clr!UM2MDoADCallBack+c0    
  0x00f98c20    
  webengine4!W3_MGD_HANDLER::ProcessNotification+5b    
  webengine4!ProcessNotificationCallback+36    
  clr!UnManagedPerAppDomainTPCount::DispatchWorkItem+195    
  clr!ThreadpoolMgr::NewWorkerThreadStart+20b    
  clr!ThreadpoolMgr::WorkerThreadStart+3d1    
  clr!Thread::intermediateThreadProc+4b    
  kernel32!BaseThreadInitThunk+e    
  ntdll!__RtlUserThreadStart+70    
  ntdll!_RtlUserThreadStart+1b 
  
  
  =========================================================================
  
  Thread 39 - System ID 4176
  Entry point   0x00000000 
  Create time   2013/3/7 10:44:21 
  Time spent in user mode   0 Days 00:00:00.140 
  Time spent in kernel mode   0 Days 00:00:00.109 
  
  
  
  
  This thread is not fully resolved and may or may not be a problem. Further analysis of these threads may be required.
  
  
  
  .NET Call Stack
  
  
  
  Function 
  Spacebuilder.Common.ProfileRepository..ctor() 
  Spacebuilder.Common.UserProfileService..ctor() 
  Spacebuilder.Common.UserSearcher..ctor(System.String, System.String, Boolean, Int32) 
  Spacebuilder.Environments.Starter.b__54(Autofac.IComponentContext) 
  Autofac.RegistrationExtensions+&lt;&gt;c__DisplayClass10`1[[System.__Canon, mscorlib]].b__f(Autofac.IComponentContext, System.Collections.Generic.IEnumerable`1) 
  Autofac.Builder.RegistrationBuilder+&lt;&gt;c__DisplayClass1`1[[System.__Canon, mscorlib]].b__0(Autofac.IComponentContext, System.Collections.Generic.IEnumerable`1) 
  Autofac.Core.Activators.Delegate.DelegateActivator.ActivateInstance(Autofac.IComponentContext, System.Collections.Generic.IEnumerable`1) 
  Autofac.Core.Resolving.InstanceLookup.Activate(System.Collections.Generic.IEnumerable`1) 
  Autofac.Core.Resolving.InstanceLookup.b__0() 
  Autofac.Core.Lifetime.LifetimeScope.GetOrCreateAndShare(System.Guid, System.Func`1) 
  Autofac.Core.Resolving.InstanceLookup.Execute() 
  Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(Autofac.Core.ISharingLifetimeScope, Autofac.Core.IComponentRegistration, System.Collections.Generic.IEnumerable`1) 
  Autofac.Core.Resolving.InstanceLookup.ResolveComponent(Autofac.Core.IComponentRegistration, System.Collections.Generic.IEnumerable`1) 
  Autofac.Features.Collections.CollectionRegistrationSource+&lt;&gt;c__DisplayClass4+&lt;&gt;c__DisplayClass6.b__1(Autofac.Core.IComponentRegistration) 
  System.Linq.Enumerable+WhereSelectArrayIterator`2[[System.__Canon, mscorlib],[System.__Canon, mscorlib]].MoveNext() 
  System.Linq.Buffer`1[[System.__Canon, mscorlib]]..ctor(System.Collections.Generic.IEnumerable`1) 
  System.Linq.Enumerable.ToArray[[System.__Canon, mscorlib]](System.Collections.Generic.IEnumerable`1) 
  Autofac.Features.Collections.CollectionRegistrationSource+&lt;&gt;c__DisplayClass4.b__0(Autofac.IComponentContext, System.Collections.Generic.IEnumerable`1) 
  Autofac.Core.Activators.Delegate.DelegateActivator.ActivateInstance(Autofac.IComponentContext, System.Collections.Generic.IEnumerable`1) 
  Autofac.Core.Resolving.InstanceLookup.Activate(System.Collections.Generic.IEnumerable`1) 
  Autofac.Core.Resolving.InstanceLookup.Execute() 
  Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(Autofac.Core.ISharingLifetimeScope, Autofac.Core.IComponentRegistration, System.Collections.Generic.IEnumerable`1) 
  Autofac.Core.Resolving.ResolveOperation.Execute(Autofac.Core.IComponentRegistration, System.Collections.Generic.IEnumerable`1) 
  Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(Autofac.Core.IComponentRegistration, System.Collections.Generic.IEnumerable`1) 
  Autofac.Core.Container.ResolveComponent(Autofac.Core.IComponentRegistration, System.Collections.Generic.IEnumerable`1) 
  Autofac.ResolutionExtensions.TryResolveService(Autofac.IComponentContext, Autofac.Core.Service, System.Collections.Generic.IEnumerable`1, System.Object ByRef) 
  Autofac.ResolutionExtensions.ResolveService(Autofac.IComponentContext, Autofac.Core.Service, System.Collections.Generic.IEnumerable`1) 
  Autofac.ResolutionExtensions.Resolve[[System.__Canon, mscorlib]](Autofac.IComponentContext, System.Collections.Generic.IEnumerable`1) 
  Autofac.ResolutionExtensions.Resolve[[System.__Canon, mscorlib]](Autofac.IComponentContext) 
  Tunynet.DIContainer.Resolve[[System.__Canon, mscorlib]]() 
  Spacebuilder.Search.SearcherFactory.GetSearcher(System.String) 
  Spacebuilder.Common.FindUserController._InterestedWithAll(Int32, Int32, System.String) 
  DynamicClass.lambda_method(System.Runtime.CompilerServices.Closure, System.Web.Mvc.ControllerBase, System.Object[]) 
  System.Web.Mvc.ActionMethodDispatcher.Execute(System.Web.Mvc.ControllerBase, System.Object[]) 
  System.Web.Mvc.ReflectedActionDescriptor.Execute(System.Web.Mvc.ControllerContext, System.Collections.Generic.IDictionary`2) 
  System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(System.Web.Mvc.ControllerContext, System.Web.Mvc.ActionDescriptor, System.Collections.Generic.IDictionary`2) 
  System.Web.Mvc.ControllerActionInvoker+&lt;&gt;c__DisplayClass15.b__12() 
  System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(System.Web.Mvc.IActionFilter, System.Web.Mvc.ActionExecutingContext, System.Func`1) 
  System.Web.Mvc.ControllerActionInvoker+&lt;&gt;c__DisplayClass15+&lt;&gt;c__DisplayClass17.b__14() 
  System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(System.Web.Mvc.IActionFilter, System.Web.Mvc.ActionExecutingContext, System.Func`1) 
  System.Web.Mvc.ControllerActionInvoker+&lt;&gt;c__DisplayClass15+&lt;&gt;c__DisplayClass17.b__14() 
  System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(System.Web.Mvc.IActionFilter, System.Web.Mvc.ActionExecutingContext, System.Func`1) 
  System.Web.Mvc.ControllerActionInvoker+&lt;&gt;c__DisplayClass15+&lt;&gt;c__DisplayClass17.b__14() 
  System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(System.Web.Mvc.ControllerContext, System.Collections.Generic.IList`1, System.Web.Mvc.ActionDescriptor, System.Collections.Generic.IDictionary`2) 
  System.Web.Mvc.ControllerActionInvoker.InvokeAction(System.Web.Mvc.ControllerContext, System.String) 
  System.Web.Mvc.Controller.ExecuteCore() 
  System.Web.Mvc.ControllerBase.Execute(System.Web.Routing.RequestContext) 
  System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(System.Web.Routing.RequestContext) 
  System.Web.Mvc.MvcHandler+&lt;&gt;c__DisplayClass6+&lt;&gt;c__DisplayClassb.b__5() 
  System.Web.Mvc.Async.AsyncResultWrapper+&lt;&gt;c__DisplayClass1.b__0() 
  System.Web.Mvc.Async.AsyncResultWrapper+&lt;&gt;c__DisplayClass8`1[[System.Web.Mvc.Async.AsyncVoid, System.Web.Mvc]].b__7(System.IAsyncResult) 
  System.Web.Mvc.Async.AsyncResultWrapper+WrappedAsyncResult`1[[System.Web.Mvc.Async.AsyncVoid, System.Web.Mvc]].End() 
  System.Web.Mvc.MvcHandler+&lt;&gt;c__DisplayClasse.b__d() 
  System.Web.Mvc.SecurityUtil.b__0(System.Action) 
  System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(System.Action) 
  System.Web.Mvc.MvcHandler.EndProcessRequest(System.IAsyncResult) 
  System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(System.IAsyncResult) 
  System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
  System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef) 
  System.Web.HttpApplication+PipelineStepManager.ResumeSteps(System.Exception) 
  System.Web.HttpApplication.BeginProcessRequestNotification(System.Web.HttpContext, System.AsyncCallback) 
  System.Web.HttpRuntime.ProcessRequestNotificationPrivate(System.Web.Hosting.IIS7WorkerRequest, System.Web.HttpContext) 
  System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32) 
  System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32) 
  DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, System.Web.RequestNotificationStatus ByRef) 
  System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr, System.Web.RequestNotificationStatus ByRef) 
  System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32) 
  System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32) 
  
  
  Full Call Stack
  
  
  
  Function   Source 
  ntdll!KiFastSystemCallRet    
  ntdll!NtWaitForSingleObject+c    
  ntdll!RtlpWaitOnCriticalSection+13e    
  ntdll!RtlEnterCriticalSection+150    
  clr!UnsafeEEEnterCriticalSection+1c    
  clr!CrstBase::Enter+1ad    
  clr!ListLockEntry::FinishDeadlockAwareEnter+25    
  clr!ListLockEntry::LockHolder::DeadlockAwareAcquire+28    
  clr!MethodTable::DoRunClassInitThrowing+4c2    
  clr!MethodDesc::DoPrestub+f1    
  clr!PreStubWorker+12c    
  0x00f80842    
  clr!PreStubWorker+165    
  System.Linq.Enumerable+WhereSelectArrayIterator`2[[System.__Canon, mscorlib],[System.__Canon, mscorlib]].MoveNext()    
  System.Linq.Buffer`1[[System.__Canon, mscorlib]]..ctor(System.Collections.Generic.IEnumerable`1&lt;System.__Canon&gt;)    
  System.Linq.Enumerable.ToArray[[System.__Canon, mscorlib]](System.Collections.Generic.IEnumerable`1&lt;System.__Canon&gt;)    
  System.Collections.Generic.Stack`1[[System.__Canon, mscorlib]].Push(System.__Canon)    
  clr!JIT_Stelem_Ref+25    
  System.Collections.Generic.Stack`1[[System.__Canon, mscorlib]].Push(System.__Canon) 
  </code></pre>
  
  <p><strong>Alex Reply:</strong></p>
  
  <blockquote>
    <p>This does sound like a tricky one. What is the DIContainer class doing
    and do you have any components registered as InstancePerHttpRequest,
    or InstancePerLifetimeScope? There also seems to be some Quartz jobs
    in the background too, how are they interacting with the container?</p>
  </blockquote>
  
  <p><strong>Travis Reply:</strong></p>
  
  <blockquote>
    <p>A very quick look at the stack trace indicates you may have some
    long-running operations or locks happening in the
    Spacebuilder.Environments.Starter,
    Spacebuilder.Common.UserSearcher.ctor,
    Spacebuilder.UserProfileService.ctor, or
    Spacebuilder.Common.ProfileRepository. What I'm seeing that's
    interesting is that during a RESOLVE operation, when whatever
    component it is gets RESOLVED, there's an internal REGISTER going on.
    Without seeing the code, I can't tell you what's going on there, but
    that thread - #39 - that's the stuff I'd look at.</p>
    
    <p>It looks like... A controller action is being invoked There's some
    sort of lambda running over a closure (DynamicClass.lambda_method) -
    something custom in your pipeline. SearcherFactory.GetSearcher
    manually tries to resolve smoething. During the resolution in
    GetSearcher, something is asking for a collection - like an
    IEnumerable of services. A constructor parameter? Here's where it
    gets weird: while resolving that IEnumerable, a new lifetime scope
    is getting created and something appears to be getting registered in
    it? The LifetimeScope.ResolveComponent call does do a lock to make
    sure resolutions are thread-safe. The fact you're getting a deadlock
    means two different threads are trying to resolve out of the same
    lifetime scope (the container?) at the same time, which, in MVC, is
    something to avoid - you probably wouldn't run into this, for example,
    if you were resolving only out of the HttpRequest lifetime scope since
    you'd only have that on one thread at a time. Alternatively, you may
    be passing lifetime scopes around in the app for the purposes of doing
    service location and that, too, can be a red flag.</p>
    
    <p>There is a wiki page on Concurrency that can also give you some
    pointers: <a href="https://code.google.com/p/autofac/wiki/Concurrency" rel="nofollow">https://code.google.com/p/autofac/wiki/Concurrency</a></p>
    
    <p>If that doesn't get you going in the direction you need, I recommend
    posting to the discussion forum since, again, I'm not really able to
    provide individual help necessarily in a timely fashion. That will get
    other eyes on it and may get you help sooner. You'll want to include:
    A description of the problem (like was in this email) but with more
    detail about what you expect to happen (e.g., you're accessing a
    controller action that does blah blah blah). The stack trace of the
    blocking thread. The code around where things are getting blocked:
    Your initial ContainerBuilder registrations to show how things are
    getting registered. What's in those constructors and things that are
    getting hung. That info will help folks more quickly root out the
    problem. That's also the stuff you should be looking at with respect
    to things getting locked</p>
  </blockquote>
  
  <p><strong>My Supplementary question detail:</strong></p>
  
  <p>The server often irregular hanging, the browser will stop responding suddenly util we use iisreset command to restart the server.  I'm not sure if a controller is called or some Quartz tasks triggered that time.</p>
  
  <p>In Application_Start(), we use ContainerBuilder.Register() to regist many components in the same root lifetime scope. And These components may call each other.</p>
  
  <p>Most them registered as SingleInstance, such as:</p>
  
  <pre><code>containerBuilder.Register(c =&gt; new DefaultCacheService(new MemcachedCache())).As&lt;ICacheService&gt;().SingleInstance();
  containerBuilder.Register(c =&gt; new QuartzTaskScheduler()).As&lt;ITaskScheduler&gt;().SingleInstance();
  containerBuilder.Register(c =&gt; new UserService()).As&lt;IUserService&gt;().SingleInstance();
  containerBuilder.Register(c =&gt; new UserSearcher("~/App_Data/IndexFiles/User")).As&lt;ISearcher&gt;().SingleInstance();
  containerBuilder.Register(c =&gt; new TagSearcher("~/App_Data/IndexFiles/Tag")).As&lt;ISearcher&gt;().SingleInstance();
  </code></pre>
  
  <p>Only a few registered as InstancePerHttpRequest, these component initialization with each request related. such as:</p>
  
  <pre><code>containerBuilder.Register(c =&gt; new FormsAuthenticationService()).As&lt;IAuthenticationService&gt;().InstancePerHttpRequest();
  </code></pre>
  
  <p>We provide a class(DIContainer) includes some simple static methods for component resolve.  The static method is called when to resolve a component, such as in some Controller, Service, Repository(DAO) or Quartz tasks.</p>
  
  <pre><code>IContainer container = containerBuilder.Build();
  DIContainer.RegisterContainer(container); 
  DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
  
  public class DIContainer
  {
     private static IContainer _container;
  
     public static void RegisterContainer(IContainer container)
     {
         _container = container;
     }
  
     public static TService Resolve&lt;TService&gt;()
     {
         return _container.Resolve&lt;TService&gt;();
     }
     ......
  }
  </code></pre>
  
  <p>We use Lucene.Net for fulltext search service, each ISearcher corresponds to a type of search and an index directory. A ISearcher is resolved in SearcherFactory.GetSearcher() when needed.</p>
  
  <pre><code>public static ISearcher GetSearcher(string IndexPath)
  {
     return DIContainer.Resolve&lt;IEnumerable&lt;ISearcher&gt;&gt;().Where(s =&gt; s.IndexPath.Equals(IndexPath, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();
  }
  </code></pre>
  
  <p>So that is, but I still can not figure out the root reason. Wishing your help.</p>