我正在尝试在ASP.NET Webforms中创建一个异步任务。在研究了互联网上的各种来源后,我创建了这个:
Default.aspx的:
namespace AsyncTestCs
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
RegisterAsyncTask(new PageAsyncTask(LoadSomeData));
}
public async Task LoadSomeData()
{
var downloadedString = await new WebClient().DownloadStringTaskAsync("http://localhost:59850/WebForm1.aspx");
Label1.Text = downloadedString;
}
}
}
WebForm1.aspx的:
namespace AsyncTestCs
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Thread.Sleep(5000);
Response.Write("something");
}
}
}
但它不能异步工作。加载downloadedString后将显示此页面。
我的错误在哪里?
答案 0 :(得分:2)
您的服务器代码未“附加”到客户端上的控件。 ASP.NET生成HTML作为其处理的一部分并将其发送到客户端。之后,与请求关联的所有ASP.NET对象都会死亡。 HTTP是基于请求 - 响应的。没有永久的联系。
您在这里做的是等待5秒,然后配置标签文本,然后将带有该标签文本的HTML发送到客户端。
Async与客户端的延迟更新无关。