如何使一个非常简单的异步方法调用在vb.net

前端之家收集整理的这篇文章主要介绍了如何使一个非常简单的异步方法调用在vb.net前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我只是一个简单的vb.net网站,需要调用一个Sub执行一个非常长的任务,可以同步文件系统中的一些目录(细节不重要).

当我调用方法时,最终会在网站上等待子程序完成.然而,即使网站超时,例行程序最终完成任务,所有的目录都应该是最终的.

我想防止超时,所以我只想异步地调用Sub.我不需要(甚至想要)和回调/确认它成功运行.

那么,如何使用VB.net在网站内异步调用我的方法

如果你需要一些代码

Protected Sub Page_Load(ByVal sender As Object,ByVal e As System.EventArgs) Handles Me.Load
    Call DoAsyncWork()
End Sub

Protected Sub DoAsyncWork()
        Dim ID As String = ParentAccountID
        Dim ParentDirectory As String = ConfigurationManager.AppSettings("AcctDataDirectory")
        Dim account As New Account()
        Dim accts As IEnumerable(Of Account) = account.GetAccounts(ID)

        For Each f As String In My.Computer.FileSystem.GetFiles(ParentDirectory)
            If f.EndsWith(".txt") Then
                Dim LastSlashIndex As Integer = f.LastIndexOf("\")
                Dim newFilePath As String = f.Insert(LastSlashIndex,"\Templates")
                My.Computer.FileSystem.CopyFile(f,newFilePath)
            End If
        Next

        For Each acct As Account In accts
            If acct.ID <> ID Then
                Dim ChildDirectory As String = ConfigurationManager.AppSettings("AcctDataDirectory") & acct.ID
                If My.Computer.FileSystem.DirectoryExists(ChildDirectory) = False Then
                    IO.Directory.CreateDirectory(ChildDirectory)
                End If
                My.Computer.FileSystem.DeleteDirectory(ChildDirectory,FileIO.DeleteDirectoryOption.DeleteAllContents)
                My.Computer.FileSystem.CopyDirectory(ParentDirectory,ChildDirectory,True)
            Else
            End If
        Next
End Sub
我不建议使用Thread类,除非你需要更多的控制线程,因为创建和拆除线程是昂贵的.相反,我建议您使用 a ThreadPool thread. See this阅读.

您可以在ThreadPool线程上执行您的方法,如下所示:

System.Threading.ThreadPool.QueueUserWorkItem(AddressOf DoAsyncWork)

您还需要将您的方法签名更改为…

Protected Sub DoAsyncWork(state As Object) 'even if you don't use the state object

最后还要注意,其他线程中的未处理的异常会杀死IIS.请参阅this article(旧但仍然相关;不确定解决方案,因为我不会使用ASP.NET).

猜你在找的VB相关文章