Mein Code wird weiterhin ausgeführt, bevor alle Aufgaben abgeschlossen wurden.Task.WhenAll Finishing vor Aufgaben abgeschlossen haben
Ich habe mir andere Leute mit einem ähnlichen Problem angesehen, kann aber nichts Offensichtliches sehen!
static Task MoveAccountAsync(MoverParams moverParams)
{
return Task.Run(() =>
{
Console.WriteLine("Moving {0}", moverParams.Account.Name);
moverParams.Account.Mover.RefreshRoom();
moverParams.Account.Mover.PathfindTo(moverParams.Room);
});
}
static async void MoveAccountsAsync(List<Account> accounts, int room)
{
List<Task> theTasks = new List<Task>();
foreach (Account account in accounts)
{
// Create a new task and add it to the task list
theTasks.Add(MoveAccountAsync(new MoverParams(account, room)));
}
await Task.WhenAll(theTasks);
Console.WriteLine("Finished moving.");
}
Dann einfach aus statischem Haupt Aufruf:
MoveAccountsAsync(theAccounts, room);
Hilfe sehr geschätzt!
Cheers, Dave
Sie können eine async void-Methode nicht abwarten. Es ist Feuer und Vergessen. Verwenden Sie immer "Async-Task", außer für Event-Handler. Innerhalb von 'Main()' '' .Wait() 'auf der resultierenden' Task' verwenden. –