Я использую библиотеку, которая предоставляет методы, заканчивающиеся на ...Async
, и возвращает Task
. Я собираюсь использовать их в приложении командной строки. Поэтому мне нужно их синхронно называть.
С#, конечно, не позволяет вызывать эти методы в методе Main
, так как вы не можете использовать модификатор async
по методу Main
. Предположим, что это задача:
var task = datastore.Save(data);
Я нашел несколько решений вроде:
Tasks.WaitAll(task);
task.Wait();
однако все эти обматывающие исключения исключены в AggregateException
, Я не хочу этого. Я просто хочу сказать task.Result
, и я ожидаю, что будет выбрано исходное исключение.
Когда я использую метод, возвращающий Task<TResult>
, task.Result
throws AggregateException
, даже если не заданы задачи продолжения. Почему это происходит?
Я также пробовал,
task.RunSynchronously();
он дает ошибку:
RunSynchronously не может быть вызван задачей, не связанной с делегатом, такой как задача, возвращенная из асинхронного метода.
поэтому я предполагаю, что не для методов, помеченных как async
.
Любые идеи о шаблонах с использованием библиотек, предназначенных для асинхронных приложений в консольных приложениях, где нет асинхронного контекста?