W jednym z filmów MVA widziałem następny budowy:Jak czekają na async delegata
static void Main(string[] args)
{
Action testAction = async() =>
{
Console.WriteLine("In");
await Task.Delay(100);
Console.WriteLine("First delay");
await Task.Delay(100);
Console.WriteLine("Second delay");
};
testAction.Invoke();
}
wyniku realizacji będą:
In
Press any key to continue . . .
Jest doskonale kompiluje, ale teraz ja nie zobacz jakikolwiek sposób na to czekać. Po wywołaniu mogę wstawić Thread.Sleep
lub Console.ReadKey
, ale tego nie chcę.
Więc jak to delegat powinien zostać zmodyfikowany tak, aby stać się awaitable? (Lub przynajmniej jak mogę śledzić że wykonanie zakończone?)
Czy są jakieś praktyczne wykorzystanie takich delegatów?
Nie ma mowy, aby 'await' go. Jeśli był to "Func", byłby inny. Dlatego należy unikać 'async void' i najlepiej używać go tylko w procedurach obsługi zdarzeń najwyższego poziomu *. –
Możesz znaleźć [mój post na blogu na temat 'async' delegatów] (http://blog.stephencleary.com/2014/02/synchronous-and-asynchronous-delegate.html) pomocne. –