Я использую библиотеку, которая предоставляет методы, заканчивающиеся на ...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.
Любые идеи о шаблонах с использованием библиотек, предназначенных для асинхронных приложений в консольных приложениях, где нет асинхронного контекста?