Start Async-Task-ohne Verwendung von Await in der aufgerufenen Methode
Fenster-Speicher-app ist eine zeitintensive Methode, die muss ich anrufen, wenn die Anwendung startet, aber ich brauche nicht zu warten auf Sie zu vervollständigen. Ich will, dass es läuft als hintergrund-task. Wenn das gehen zu einem bestimmten Teil der Anwendung (reporting), dann werde ich prüfen und, wenn notwendig, warten Sie auf die Aufgabe.
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
Ist es so aufgerufen
Dim updateTask As Task(Of Boolean) = UpdateVehicleSummaries(0)
Es ist kein Warten auf Anruf und ich bekomme die Warnung, dass es dann synchron läuft. Wie fange ich so etwas und haben es asynchron laufen soll? Ich will es auf seine eigene thread/task, ohne zu blockieren den interface-thread. Irgendwelche Ideen?
Danke!
Die einfachste Implementierung ist die Verwendung einer
Irgendwelche Proben? System.ComponentModel.BackgroundWorker ist nicht Teil des Windows.Store Rahmen.
Keine, die sind kurz genug, um hier - ich werde versuchen, verfassen Sie eine kurze Antwort unter
BackgroundWorker
Irgendwelche Proben? System.ComponentModel.BackgroundWorker ist nicht Teil des Windows.Store Rahmen.
Keine, die sind kurz genug, um hier - ich werde versuchen, verfassen Sie eine kurze Antwort unter
InformationsquelleAutor Robert Beaubien | 2013-02-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie führen Sie den code in Ihrer Funktion innerhalb einer
Task
die können Sie dann wieder aus:Können Sie dann die Funktion aufrufen, wie Sie vorgeschlagen:
Später können Sie erwarten, die Aufgabe zu vollenden, wenn Sie brauchen das Ergebnis:
BackgroundWorker
!Perfekt, aber ich würde vermuten, anstelle von "Wenn Nicht updateTask.IsComplete" sollte es "Dim result = Await "updateTask". Wenn es schon abgeschlossen, es sollte sofort das Ergebnis, und wenn nicht, wird es auf die Fertigstellung zu warten.
Ja, du hast Recht. Ich werde aktualisieren, meine Antwort entsprechend.
Ich würde empfehlen, mit
Task.Run
stattTask.Factory.StartNew
; gibt es einige kleinere VerbesserungenTask.Run
.InformationsquelleAutor Damir Arh
Ich denke, das ist eine noch einfache Lösung, die viel leichter zu Lesen
InformationsquelleAutor LorneCash