2013-01-21 4 views
1

Je souhaite démarrer une tâche d'arrière-plan sans utiliser le mot-clé Await. Au lieu de cela, je veux surveiller la tâche à divers points et la redémarrer si nécessaire pour mettre à jour les informations en arrière-plan. Voici la méthode que je suis en train d'appeler:Démarrer la tâche sans attendre

Public 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 
       Await UpdateVehicleStats(tempVehicle) 
      End If 
     Next 

     Return True 
    End Function 

Le code que je suis en train de commencer la tâche ne semble pas fonctionner et je ne suis pas sûr de savoir comment fournir le paramètre. Je reçois une erreur « Tâche (de Boolean) ne peut pas être converti en System.Action et ou une erreur sur le paramètre »

Dim tempTask As Task 
    tempTask = New Task(UpdateVehicleSummaries(tempVehicleID)) 
    tempTask.Start() 

Toute aide serait appréciée.

Répondre

2

Depuis UpdateVehicleSummaries est déjà asynchrone, vous devriez être abel juste faire:

Dim tempTask As Task(Of Boolean) = UpdateVehicleSummaries(tempVehicleID) 

Le retour Task(Of T) sera « chaud » (marche), mais ne devrait pas bloquer, comme l'appel Await retournera immédiatement contrôler le flux vers l'appelant à ce moment-là.


Une utilisation plus typique de cette méthode, si vous avez besoin d'effectuer d'autres travaux alors que cela va, serait de faire ce qui suit:

Dim tempTask = UpdateVehicleSummaries(tempVehicleID) 

' Do your other work 

Dim success = Await tempTask ' Get the boolean result asynchronously... 

' use the result 
+0

Il faut donc utiliser serait quelque chose de similaire à ce ?: \t \t Dim tempTask Comme la tâche (de Boolean) = UpdateVehicleSummaries (tempVehicleID) \t \t 'faire d'autres choses \t \t tempTask.Wait() \t \t' continu e work –

+0

@RobertBeaubien Normalement, vous utiliseriez plutôt là-bas. Cela évite d'avoir besoin d'appeler 'Wait()' - bien que vous puissiez si vous le voulez/devez le faire –

+0

Parfait. Je vous remercie. –

Questions connexes