На основании ответа пользователя на Получить текущий экземпляр задачи в теле асинхронного метода , вы можете сделать это:
Private Async Function DoStuff() As Task
'Capture the resulting task in a variable.
Dim t As Task = (
Async Function() As Task
Console.WriteLine("DoStuff()")
'First await. Required in order to return the task to 't'.
Await Task.Delay(1)
'Disable warnings:
' "Because this call is not awaited (...)"
' "Variable 't' is used before it has been assigned a value (...)"
#Disable Warning BC42358, BC42104
'Call other method.
DoOtherStuff(t)
#Enable Warning BC42358, BC42104
'Simulate process.
Await Task.Delay(3000)
End Function
).Invoke()
'Await if needed.
Await t
End Function
Private Async Function DoOtherStuff(ByVal ParentTask As Task) As Task
Console.WriteLine("DoOtherStuff()")
'Await parent task.
Await ParentTask
Console.WriteLine("DoStuff() finished!")
End Function
Используя лямбда-выражениеВы можете захватить текущее задание, а затем передать его себе.Await Task.Delay(1)
требуется для того, чтобы асинхронный метод возвратил свою задачу, чтобы он мог быть установлен в переменную.Тем не менее, вы можете удалить его, если у вас уже есть ожидание до вызова DoOtherStuff()
.