您好我需要异步调用HttpWebRequest,问题是BeginGetResponse方法具有作为第一个参数的AsyncCallback具有void签名的目标方法。
WebRequest _webRequest;
private void StartWebRequest()
{
_webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), null);
}
我需要具有Stream返回类型的目标方法。像这样:
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);
}
}
我怎么能做到这一点?
答案 0 :(得分:1)
创建一个只调用FinishWebRequest
方法的回调很容易,但这样会丢弃该流,不会让你感觉更好......
(就个人而言,我不会依赖ContentLength - 它并不总是设置。我只是维护一个你读入的小缓冲区,然后直接写入内存流。如果你使用的是.NET 4您可以使用新的Stream.CopyTo
方法来简化生活。另外,WebResponse
实现了IDisposable
,因此您也应该有using
语句。)