1

Awaitキーワードを使用せずにバックグラウンドタスクを開始したいと思います。代わりに、さまざまな時点でタスクを監視し、必要に応じてタスクを再開して、バックグラウンドで情報を更新したいと思います。これが私が呼び出そうとしているメソッドです:

    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

タスクを開始しようとしているコードが機能していないようで、パラメーターを指定する方法がわかりません。「Task(OfBoolean)をSystem.Actionに変換できないか、パラメーターのエラー」というエラーが表示されます。

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

どんな助けでもいただければ幸いです。

4

1 に答える 1

2

はすでに非同期であるためUpdateVehicleSummaries、次のことを行う必要があります。

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

返さTask(Of T)れるのは「ホット」(実行中)ですがAwait、呼び出しはその時点で呼び出し元に制御フローをすぐに返すため、ブロックしないでください。


この方法のより一般的な使用法は、これが実行されている間に他の作業を実行する必要がある場合、次のことを行うことです。

Dim tempTask = UpdateVehicleSummaries(tempVehicleID)

' Do your other work

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

' use the result
于 2013-01-21T23:41:51.723 に答える