从ASP.NET页面调用异步方法让我等待结果

时间:2013-05-24 15:00:01

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

从我的ASP.NET页面中,我从这样的引用项目中调用一个方法:

Dim oValServiceAgent As New ServiceAgents.ValServiceAgent(System.Security.Principal.TokenImpersonationLevel.Impersonation, "ValEndPointName")
Using (CType(HttpContext.Current.User.Identity, System.Security.Principal.WindowsIdentity).Impersonate())
    oValServiceAgent.DoStuffAsync()
End Using

使用类valServiceAgent引用项目ServiceAgent:

public void DoStuffAsync()
{
    //invokes async method using delegates
}

我希望用户能够在DoStuffAsync()完成之前导航到不同的页面。在目前的情况下,这是不可能的。

我正在使用VS2010并以.NET Framework 3.5为目标

3 个答案:

答案 0 :(得分:0)

启动异步进程后,您是否尝试过调用Request.End()?这将迫使当前的请求立即结束。不确定这是否有用,但你可以试试。

请注意,启动后台线程在网页中不是一件好事,因为在完成由于应用程序池回收而尝试完成的内容之前,不能保证该线程不会被杀死。该线程成为当前应用程序池的一部分,并在您开始之后将受其支配。我更喜欢的方法是将操作排队并将其处理到Web应用程序之外。您可以使用您想要的任何队列框架,甚至可以通过将记录写入表格或其他内容来自行编排。

答案 1 :(得分:0)

问题出在Falanwe建议的异步方法中,而不是我的asp.net代码中。

感谢您的建议。

答案 2 :(得分:-1)

这里有一些要点

  • asyncawait关键字方法是.Net 4.5功能。
  • async suffix仅适用于支持async
  • 的方法

。更多关于.Net 4.5中的异步here

在.net 3.5中,您应该使用ThreadBackgroundWorker来创建自己的异步方法。

我们需要更高精度的异步方法体,以便为您提供进一步的帮助