public virtual Stream ProcessAsynchronously(Stream requestStream) { DateTime now = DateTime.Now; string asyncToken = now.Ticks.ToString(CultureInfo.InvariantCulture); AsyncTask asyncTask = null; if (requestStream == null) { asyncTask = new AsyncTask(this, this.CreateRequestMessage(null), now.AddSeconds(AsyncTask.DefaultDuration)); } else { StreamPipe requestPipe = new StreamPipe(); using (requestPipe.WriteStream) { requestStream.CopyTo(requestPipe.WriteStream); // read the input stream to memory } var requestMessage = this.CreateRequestMessage(requestPipe.ReadStream); asyncTask = new AsyncTask(this, requestMessage, now.AddSeconds(AsyncTask.DefaultDuration)); } AsyncTask.AddTask(asyncToken, asyncTask); StreamPipe responsePipe = new StreamPipe(); var responseMessage = new ODataResponseMessage(responsePipe.WriteStream, 202); //202 Accepted responseMessage.PreferenceAppliedHeader().RespondAsync = true; ResponseWriter.WriteAsyncPendingResponse(responseMessage, asyncToken); return(responsePipe.ReadStream); }