0

从我的 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 框架 3.5

4

3 回答 3

0

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

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

于 2013-05-24T20:31:23.697 回答
0

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

感谢您的建议。

于 2014-03-05T09:25:11.873 回答
-1

这里有几点

  • asyncawait关键字方法是 .Net 4.5 的特性。
  • async 后缀是仅适用于支持 async 的方法的约定

.Net 4.5 中有关异步的更多信息

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

我们需要对您的异步方法主体进行更精确的处理,以便为您提供进一步的帮助

于 2013-05-24T20:17:49.533 回答