如何在asp.net 4.0中执行异步任务

如何在asp.net 4.0中执行异步任务,asp.net,asynchronous,task-parallel-library,Asp.net,Asynchronous,Task Parallel Library,我是ASP.net新手,我面临异步任务的问题 这是我想做的 假设我有一个名为WebPage1的网页,上面有一个按钮1 protected void Button1_Click(object sender, EventArgs e) { Button1.Text = "Working...."; System.Threading.Thread.Sleep(20000); Button1.Text = "Finish !"; } 我希

我是ASP.net新手,我面临异步任务的问题

这是我想做的

假设我有一个名为WebPage1的网页,上面有一个按钮1

protected void Button1_Click(object sender, EventArgs e)
    {
        Button1.Text = "Working....";
        System.Threading.Thread.Sleep(20000);
        Button1.Text = "Finish !";
    }
我希望能够切换到WebPage2,而不会丢失从按钮1开始的任务。因此,当我在20秒后返回WebPage1时,我应该能够在按钮上读到“Finish!”

可能吗?我强调我必须使用.net 4.0来实现这一点

我一直在看

  • IAsyncResult接口
但我找不到解决问题的办法


提前谢谢

首先需要导入

using System.Threading.Tasks;
那么按钮处理程序应该是这样的

protected void Button1_Click(object sender, EventArgs e)
    {
        Button1.Text = "Working....";
        Task.Factory.StartNew(() =>
        {
               //Do Stuff
        });
    }

您需要知道任务何时完成,以便在返回页面加载时检查它。这很可能是某种数据库值。它允许您告诉用户任务是否已完成。

对于异步回发,您可以尝试使用updatepanel来实现

下面是一个简单的示例,您可以参考:

    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="Updt1" runat="server">
        <ContentTemplate>
            <asp:Label ID="lblError" runat="server" Text="Label"></asp:Label>
            <asp:Button ID="btn" runat="server" Text="Click Update" onclick="btn_Click"/>
            <asp:UpdateProgress ID="UpdtProgress" DisplayAfter="1" AssociatedUpdatePanelID="Updt1" runat="server">
                <ProgressTemplate>
                    Please Wait
                </ProgressTemplate>
            </asp:UpdateProgress>
        </ContentTemplate>
    </asp:UpdatePanel>


protected void btn_Click(object sender, EventArgs e)
        {
            try
            {
                lblError.Visible = false;
                lblError.Text = "Start";
                System.Threading.Thread.Sleep(6000);
                lblError.Text = "End";
                lblError.Visible = true;
            }
            catch (Exception ex)
            {
                lblError.Text = ex.Message;
                lblError.Visible = true;
            }

        }

请稍候
受保护的无效btn_单击(对象发送方,事件参数e)
{
尝试
{
lblError.Visible=false;
lblError.Text=“开始”;
系统。线程。线程。睡眠(6000);
lblError.Text=“结束”;
lblError.Visible=真;
}
捕获(例外情况除外)
{
lblError.Text=ex.消息;
lblError.Visible=真;
}
}
FYI: