进行异步处理时,CurrentModuleContainer.Get Asp .Net代码中的零星NullPointerException

时间:2012-07-10 06:18:51

标签: asp.net asynchronous .net-4.5 async-await asp.net-4.5

我有一个Asp .Net应用程序,我正在使用.net 4.5 RC的新async / await范例。 我正在使用新的基于任务的异步http处理程序HttpTaskAsyncHandler来处理http请求。在我的代码中,我正在做一些I / O流文件到客户端。

偶尔我会得到一个带有以下堆栈跟踪的NullPointerException

  

System.Web.dll!System.Web.HttpApplication.CurrentModuleContainer.get()+ 0x1e bytes       System.Web.dll!System.Web.HttpApplication.PipelineStepManager.ResumeSteps(System.Exception error)+ 0xb7 bytes
      System.Web.dll!System.Web.HttpApplication.CallHandlerExecutionStep.OnAsyncHandlerCompletion(System.IAsyncResult ar)+ 0x1f3 bytes
      mscorlib.dll!System.Threading.Tasks.Task.Execute()+ 0x6e bytes       mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext,System.Threading.ContextCallback callback,object state,bool preserveSyncCtx)+ 0x285 bytes       mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext,System.Threading.ContextCallback callback,object state,bool preserveSyncCtx)+ 0x9 bytes
      mscorlib.dll!System.Threading.Tasks.Task.ExecuteWithThreadLocal(ref System.Threading.Tasks.Task currentTaskSlot)+ 0x1c5 bytes
      mscorlib.dll!System.Threading.Tasks.Task.ExecuteEntry(bool bPreventDoubleExecution)+ 0xb0 bytes
      mscorlib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch()+ 0x1ea bytes
      [原产于管理过渡]
      [Appdomain Transition]
      [原生于管理过渡]

这似乎发生在我的代码已经返回响应之后。

当发生这种情况时,下一个请求永远不会被处理,但是后一个请求恢复正常。

这种行为可能是什么原因?我看了一下CurrentModuleContainer.Get方法的源代码,似乎唯一可以抛出空指针异常的是Http上下文。

1 个答案:

答案 0 :(得分:0)

异常可能来自许多不同的原因,但可以猜测您正在尝试访问处理程序中的当前HttpContext,在异步结束函数期间可能为null。