Début Async Tâche sans l'aide de qui les Attendent dans la méthode appelée
App store de fenêtre qui a une méthode longue que j'ai besoin d'appeler au démarrage de l'application, mais je n'ai pas besoin d'attendre qu'elle se termine. Je veux qu'il fonctionne comme une tâche de fond. Si l'aller vers une certaine partie de la demande (reporting), alors je vais vérifier et, si nécessaire, à attendre sur la tâche.
Public Shared Async Function UpdateVehicleSummaries(p_vehicleID As Int32) As Task(Of Boolean)
Dim tempVehicle As Koolsoft.MARS.BusinessObjects.Vehicle
For Each tempVehicle In Vehicles
If p_vehicleID = 0 Or p_vehicleID = tempVehicle.VehicleID Then
UpdateVehicleStats(tempVehicle)
End If
Next
Return True
End Function
Il est appelé comme cela
Dim updateTask As Task(Of Boolean) = UpdateVehicleSummaries(0)
Il n'a pas d'Attendre l'appel à elle, et j'ai l'avertissement qu'il puisse fonctionner de manière synchrone. Comment puis-je commencer quelque chose comme ce qu'il s'exécute de façon asynchrone? Je veux qu'il marche sur son propre thread/tâche sans bloquer le thread d'interface. Des idées?
Merci!
BackgroundWorker
Obtenu des échantillons? Système.ComponentModel.BackgroundWorker ne fait pas partie de Windows.Magasin de cadre.
Aucun de ceux qui sont assez court pour le mettre ici - je vais essayer de composer une courte réponse ci-dessous
OriginalL'auteur Robert Beaubien | 2013-02-15
Vous devez vous connecter pour publier un commentaire.
Vous devez exécuter le code dans votre fonction à l'intérieur d'un
Task
que vous pouvez ensuite retour:Vous pouvez appeler la fonction comme vous l'avez suggéré:
Plus tard, vous pouvez attendre la tâche à accomplir quand vous avez besoin le résultat:
BackgroundWorker
!Parfait, mais je dirais au lieu de "Si Pas updateTask.IsComplete" il faut "Dim result = Attendent updateTask". Si sa déjà complet, il doit immédiatement retourner le résultat, et si non, il va attendre la fin.
Oui, vous avez raison. Je vais mettre à jour ma réponse en conséquence.
Je vous conseille d'utiliser
Task.Run
au lieu deTask.Factory.StartNew
; il y a quelques améliorations mineures àTask.Run
.OriginalL'auteur Damir Arh
Je pense que c'est encore plus simple solution qui est beaucoup plus facile à lire
OriginalL'auteur LorneCash