从我的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为目标
答案 0 :(得分:0)
启动异步进程后,您是否尝试过调用Request.End()?这将迫使当前的请求立即结束。不确定这是否有用,但你可以试试。
请注意,启动后台线程在网页中不是一件好事,因为在完成由于应用程序池回收而尝试完成的内容之前,不能保证该线程不会被杀死。该线程成为当前应用程序池的一部分,并在您开始之后将受其支配。我更喜欢的方法是将操作排队并将其处理到Web应用程序之外。您可以使用您想要的任何队列框架,甚至可以通过将记录写入表格或其他内容来自行编排。
答案 1 :(得分:0)
问题出在Falanwe建议的异步方法中,而不是我的asp.net代码中。
感谢您的建议。
答案 2 :(得分:-1)
这里有一些要点
async
和await
关键字方法是.Net 4.5功能。 。更多关于.Net 4.5中的异步here
在.net 3.5中,您应该使用Thread或BackgroundWorker来创建自己的异步方法。
我们需要更高精度的异步方法体,以便为您提供进一步的帮助