无法在ASP.NET Webforms中运行任务异步

时间:2014-10-24 09:09:46

标签: c# asp.net .net asynchronous webforms

我正在尝试在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后将显示此页面。

我的错误在哪里?

1 个答案:

答案 0 :(得分:2)

您的服务器代码未“附加”到客户端上的控件。 ASP.NET生成HTML作为其处理的一部分并将其发送到客户端。之后,与请求关联的所有ASP.NET对象都会死亡。 HTTP是基于请求 - 响应的。没有永久的联系。

您在这里做的是等待5秒,然后配置标签文本,然后将带有该标签文本的HTML发送到客户端。

Async与客户端的延迟更新无关。