【发布时间】:2014-07-01 12:35:19
【问题描述】:
我有一个 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)
【问题讨论】:
-
你能使用现代风格的c#吗?你能用
async/await模式做吗? -
在调用
ContinueWith时,响应可能已经发送。 -
哦,忘了说 - 我用的是 .net 4.0
-
那么回答我的问题为“否”。我已标记您的问题以表示这一点。
-
@Noseratio,我正在使用 VS 2013
标签: c# asp.net asynchronous .net-4.0 task-parallel-library