我有一个 Asp .Net 应用程序,我正在使用新的 async/await 范式和 .net 4.5 RC。我正在使用新的基于任务的异步 http 处理程序HttpTaskAsyncHandler
来处理 http 请求。在我的代码中,我正在做一些 I/O 将文件流式传输到客户端。
偶尔我会得到NullPointerException
以下堆栈跟踪:
System.Web.dll!System.Web.HttpApplication.CurrentModuleContainer.get() + 0x1e 字节 System.Web.dll!System.Web.HttpApplication.PipelineStepManager.ResumeSteps(System.Exception 错误) + 0xb7 字节
System.Web.dll! System.Web.HttpApplication.CallHandlerExecutionStep.OnAsyncHandlerCompletion(System.IAsyncResult ar) + 0x1f3 字节
mscorlib.dll!System.Threading.Tasks.Task.Execute() + 0x6e 字节 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 字节
mscorlib.dll!System.Threading.Tasks.Task.ExecuteWithThreadLocal(ref System.Threading.Tasks.Task currentTaskSlot) + 0x1c5 字节
mscorlib.dll!System.Threading.Tasks.Task.ExecuteEntry(bool bPreventDoubleExecution) + 0xb0 字节
mscorlib.dll !System.Threading.ThreadPoolWorkQueue.Dispatch() + 0x1ea 字节
[本地到托管转换]
[Appdomain 转换]
[本地到托管转换]
这似乎发生在我的代码已经返回响应之后。
发生这种情况时,下一个请求永远不会被处理,但之后的请求会恢复正常。
这种行为的原因可能是什么?我查看了 CurrentModuleContainer.Get 方法的源代码,似乎唯一可以引发空指针异常的是 Http 上下文。