C# WebRequest.BeginGetResponse-“网络请求”;异步回调";非空洞法中的目标

C# WebRequest.BeginGetResponse-“网络请求”;异步回调";非空洞法中的目标,c#,asynchronous,httpwebrequest,C#,Asynchronous,Httpwebrequest,我需要异步调用HttpWebRequest,问题是BeginGetResponse方法的第一个参数AsyncCallback指向具有无效签名的方法 WebRequest _webRequest; private void StartWebRequest() { _webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), null); } 我需要使用流返回类型作为目标方法。大

我需要异步调用HttpWebRequest,问题是BeginGetResponse方法的第一个参数AsyncCallback指向具有无效签名的方法

    WebRequest _webRequest;

    private void StartWebRequest()
    {
        _webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), null);
    }
我需要使用流返回类型作为目标方法。大概是这样的:

    private Stream FinishWebRequest(IAsyncResult result)
    {
       var response= _webRequest.EndGetResponse(result);

       using (var stream = response.GetResponseStream())
       {
           Byte[] buffer = new Byte[response.ContentLength];
           int offset = 0, actuallyRead = 0;
           do
           {
               actuallyRead = stream.Read(buffer, offset, buffer.Length - offset);
               offset += actuallyRead;
           }
           while (actuallyRead > 0);
           return new MemoryStream(buffer);
       }
    }

我怎样才能做到这一点呢?

基本上你做不到。那不可能是你的回电。此外,将其作为回调是没有意义的,因为实际上没有任何东西可以使用返回的流。一旦启动回调,您打算如何处理流

创建一个只调用
FinishWebRequest
方法的回调非常简单,但这会丢弃流,不会让您有更好的结果

(就我个人而言,顺便说一句,我不会依赖ContentLength——它并不总是设置好的。我只会保留一个小的缓冲区,让你读入,然后直接写入内存流。如果你使用的是.NET 4,你可以使用新方法使生活更轻松。另外,
WebResponse
实现
IDisposable
,因此你应该有一个
using
也有这样的说法。)