Ale*_*Gad 2 asp.net-mvc task-parallel-library
我们有一个大型库,它使用HttpWebRequest进行大量HTTP调用来获取数据.重写此库以使用与HTTPClient的异步调用将是一个熊.所以,我想知道我是否可以创建使用taskfactory调用我们的库的异步控制器,以及最终通过WebClient进行的调用是异步还是仍然是同步的.尝试将异步与旧的HttpWebRequest混合,是否会出现任何问题/副作用?
如果我理解你提出的建议答案是:不,改变客户谈到的服务是异步的也无济于事.无论服务器是否异步,客户端仍然会阻止CPU线程,而I/O在服务器上是未完成的.
没有理由转离HttpWebRequest.您可以TaskFactory::FromAsync在.NET 4.0中使用来调用HttpWebRequest::BeginGetResponse.看起来像这样:
WebRequest myWebRequest = WebRequest.Create("http://www.stackoverflow.com");
Task<WebResponse> getResponseTask = Task<WebResponse>.Factory.FromAsync(
myWebRequest.BeginGetResponse,
myWebRequest.EndGetResponse,
null);
getResponseTask.ContinueWith(getResponseAntecedent =>
{
WebResponse webResponse = getResponseAntecedent.Result;
Stream webResponseStream = webResponse.GetResponseStream();
// read from stream async too... eventually dispose of it
});
Run Code Online (Sandbox Code Playgroud)
在.NET 4.5中,您仍然可以继续使用HttpWebRequest新GetResponseAsync方法并使用awaitC#中的新功能,从而使生活更轻松:
WebRequest myWebRequest = WebRequest.Create("http://www.stackoverflow.com");
using(WebResponse webResponse = await myWebRequest.GetResponseAsync())
using(Stream webResponseStream = webResponse.GetResponseStream())
{
// read from stream async, etc.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
840 次 |
| 最近记录: |