我有一个HTTP处理程序,应该将一些文本写入输出。文本内容是异步检索的,因此我想在ProcessRequest方法中像这样写入响应流:
GetContent().ContinueWith(task =>
{
using (var stream = task.Result)
{
stream.WriteTo(context.Response.OutputStream);
}
});
然而,我遇到了一个带有堆栈跟踪的NullReferenceException。
in System.Web.HttpWriter.BufferData(Byte[] data, Int32 offset, Int32 size, Boolean needToCopyData)
in System.Web.HttpWriter.WriteFromStream(Byte[] data, Int32 offset, Int32 size)
in System.Web.HttpResponseStream.Write(Byte[] buffer, Int32 offset, Int32 count)
in System.IO.MemoryStream.WriteTo(Stream stream)
in SomeHandler.<>c__DisplayClass1.<ProcessRequest>b__0(Task`1 task) in SomeHandler.cs:line 33
in System.Threading.Tasks.ContinuationTaskFromResultTask`1.InnerInvoke()
in System.Threading.Tasks.Task.Execute()
如果我不使用ContinueWith并在task.Wait()之后编写响应-就不会出现错误,但很明显这不是一个解决方案。
var task = GetContent();
task.Wait();
using (var stream = task.Result)
{
stream.WriteTo(context.Response.OutputStream);
}
我该如何消除这个错误?(使用 .net 4.0)
async
/await
模式下完成吗? - Daniel A. WhiteContinueWith
时,响应很可能已经被发送。 - Daniel A. White