【发布时间】:2013-12-07 12:11:55
【问题描述】:
我是 asp.net 4.5 异步的新手,在异步方法中调用 response.redirect 时遇到以下问题。问题是响应只是“挂起”有没有其他人在尝试异步重定向时遇到过类似的问题?此代码适用于全新项目,但不适用于我们现有代码中的新页面。我确保从我们的 web.config 中删除所有可能的内容并删除我们的母版页。撞砖墙……有什么想法吗?谢谢!
protected void Page_Load(object sender, EventArgs e)
{
RegisterAsyncTask(new PageAsyncTask(PageLoadAsync));
}
private async Task PageLoadAsync()
{
var data = await GetData();
if (data == HttpStatusCode.OK)
Response.Redirect("http://www.google.com");
}
private async Task<HttpStatusCode> GetData()
{
using (var client = new HttpClient())
{
var response = await client.GetAsync("https://www.google.com");
return response.StatusCode;
}
}
【问题讨论】:
-
我认为你不能在异步线程上执行
Redirect -
我不明白你为什么需要异步,你仍然需要等待 HttpClient 在完成加载/渲染页面之前响应。而且您不会同时做多件事。顺便说一句:如果你有互联网连接,谷歌将永远工作;)
-
他需要异步,因为他正在执行 I/O 密集型任务(向远程资源发送 HTTP 请求)。想象一下,这个资源需要很长时间才能响应。在此期间,您将危及您的 ASP.NET 工作线程。现在假设这个端点同时被 200 个用户访问 => 你的站点将会死掉,因为没有任何工作线程可用于服务请求。这就是为什么在这种情况下使用异步非常重要。
-
@DarinDimitrov,工作线程将如何获得响应?还是服务器会将更新(块)推送到 HTML5 websockets 之类的客户端?我还在困惑
how RegisterAsyncTask works? -
client.GetAsync 方法使用 I/O 完成端口。你可以在这里阅读更多关于它们的信息:msdn.microsoft.com/en-us/magazine/cc163463.aspx。服务器到服务器的通信中没有块或 HTML5 WebSockets。
标签: c# asp.net async-await response.redirect