RegisterAsyncTask不在ASP.Net Web窗体页面中运行异步任务

时间:2017-08-18 11:56:24

标签: asp.net vb.net asynchronous webforms pageasynctask

我在ASP.Net网络表单应用程序中有一个登录页面。成功登录后,它会执行一些耗时的数据库操作,这会降低登录过程的速度,所以我想以异步方式运行它们。

我正在尝试使用RegisterAsyncTask等以推荐的方式执行此操作。我已设置@Page Async =" true"在aspx文件中并在aspx.vb文件中实现了以下代码(缩减以显示基本元素):

       Protected Sub btnLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLogin.Click

            If LoginSuccessful() Then
               DoLoginStuff()
            End If

        End Sub

        Private Sub DoLoginStuff()
            ...
            RegisterAsyncTask(New PageAsyncTask(Function() DoExpensiveDbCheck(userKey)))
            Page.ExecuteRegisteredAsyncTasks()
            ...
        End Sub

        Private Async Function DoExpensiveDbCheck(ByVal UserKey As Integer) As Task
           ...
           response = Await Task.Run(Function() DbService.DoCheck(UserKey))
           If response.Success AndAlso response.Items.Count() = 1 Then
               Session("DbValueForUseLater") = response.Item[0].Whatever
           End If
        End Function

但是,DoExpensiveDbCheck函数永远不会运行(函数开头的断点永远不会被命中),并且永远不会设置Session(" DbValueForUseLater")。

我想也许它不会运行,因为登录功能通过重定向到应用程序的主页完成,所以我添加了Page.ExecuteRegisteredAsyncTasks()以防万一,但这没有区别。 / p>

有趣的是,如果我为DoExpensiveDbCheck创建一个Task而不是使用RegisterAsyncTask,并对此任务执行等待,那么应用程序将完全冻结,并且DoExpensiveDbCheck中的断点永远不会被命中。

有谁知道我在这里做错了什么?

0 个答案:

没有答案