Używam biblioteki, która udostępnia metody kończące się na ...Async
i zwraca Task
. Zamierzam je wykorzystać w aplikacji wiersza poleceń . Muszę więc nazywać je synchronicznie.Poczekaj na zadanie async bez wyjątków pakowania w wyjątku AggregateException
C# oczywiście nie zezwala na wywoływanie tych metod w metodzie Main
, ponieważ nie można użyć modyfikatora async
na metodzie Main
. Zakładam, że to jest zadanie:
var task = datastore.Save(data);
Znalazłem kilka rozwiązań takich jak:
Tasks.WaitAll(task);
task.Wait();
jednak wszystkie te owinięcia rzucony wyjątków w AggregateException
, nie chcę, że. Chcę tylko powiedzieć: task.Result
i oczekuję, że oryginalny wyjątek zostanie zgłoszony.
Kiedy stosować metodę powracającego Task<TResult>
, task.Result
rzuca AggregateException
chociaż istnieją żadne określone zadania uzupełniające. Dlaczego to się dzieje?
ja też próbowałem,
task.RunSynchronously();
daje błąd:
RunSynchronously may not be called on a task not bound to a delegate, such as the task returned from an asynchronous method.
więc myślę, że nie jest dla metod oznaczonych jako async
.
Wszelkie pomysły dotyczące wzorców z wykorzystaniem bibliotek zaprojektowanych dla aplikacji asynchronicznych w aplikacjach konsolowych, w których nie ma kontekstu asynchronicznego?