Comment faire un appel de méthode asynchrone très simple dans vb.net
J'ai juste un simple vb.net site web qui ont besoin d'appeler un Sous qui effectue un très long travail qui fonctionne avec la synchronisation de certains répertoires dans le système de fichiers (les détails ne sont pas importants).
Lorsque j'appelle la méthode, c'est finalement sur le site web d'attente pour la sous-routine complète. Cependant, même si le site en temps, la routine finalement complète de la tâche et de tous les répertoires fin comme ils le devraient.
Je veux juste éviter le délai d'attente donc je voudrais simplement appeler le Sous asynchrone. Je n'ai pas besoin (ou même vouloir) et de rappel/confirmation qu'il a été exécuté avec succès.
Alors, comment puis-je appeler ma méthode asynchrone à l'intérieur d'un site web en utilisant VB.net?
Si vous avez besoin d'un peu de code:
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
source d'informationauteur EdenMachine
Vous devez vous connecter pour publier un commentaire.
Je ne recommandent pas l'utilisation de la
Thread
classe, sauf si vous avez besoin de beaucoup plus de contrôle sur le fil, comme la création et à la déchirure en bas de threads est cher. Au lieu de cela, je vous conseille d'utiliser un pool de threads thread. Voir ce pour une bonne lecture.Vous pouvez exécuter votre méthode sur un
ThreadPool
thread comme celui-ci:Vous aurez également besoin de changer votre signature de la méthode de...
Enfin, sachez également que les exceptions non gérées dans d'autres threads de tuer IIS. Voir cet article (vieux mais toujours pertinents; pas sûr des solutions, bien que depuis je n'ai pas reaslly utilisation ASP.NET).
Vous pouvez le faire avec un simple fil de discussion:
Ajouter :
Et partout où vous voulez qu'il fonctionne :
L'appel à
t.Start()
retourne immédiatement et le nouveau thread s'exécuteDoAsyncWork
en arrière-plan jusqu'à la fin. Vous devez assurez-vous que tout dans cet appel a été thread-safe, mais à première vue, il semble généralement être déjà.J'ai aussi été à la recherche d'informations sur la programmation Asynchrone en VB. En plus de ce fil, j'ai aussi trouvé les suivants: au début avec Visual Studio 2012 et .Net Framework 4.5, VB a donné deux mots-clés pour effectuer une méthode asynchrone à droite dans la déclaration, sans l'aide de Fil ou de pool de threads. Les nouveaux mots-clés sont "Async" et "en attente". Vous pouvez consulter les liens suivants si vous le souhaitez:
http://msdn.microsoft.com/library/hh191443%28vs.110%29.aspx
https://msdn.microsoft.com/en-us/library/hh191564%28v=vs.110%29.aspx