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(Of Boolean) 无法转换为 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 回答