Я использую SendGrid (служба SMTP на основе облачных вычислений) для отправки электронных писем из проекта web api. Я хочу, чтобы мое приложение ожидало/блокировало (например, 30 секунд), пока у меня не будет ответа от SendGrid, прежде чем возвращать ответ клиенту, а не немедленно возвращаться. Библиотека SendGrid имеет метод DeliverAsync, который возвращает задачу.Как подождать по методу async в сторонней библиотеке - web api
Я смотрю, как я могу подождать на задаче.
Я прочитал бесконечные статьи о том, как это можно сделать и понять, что если бы это был мой собственный код, я бы использовал ConfigureAwait (false) для задачи, чтобы предотвратить тупик и позволить мне подождать. Проблема здесь в том, что код не мой! Не похоже, что SendGrid имеет синхронный метод отправки.
У меня нет асинхронных контроллеров, хотя я бы оценил, что это будет способ сделать это, но я хотел бы знать, есть ли другой способ, которым я мог бы это сделать.
Надеюсь, это имеет смысл !!
Если вы используете стороннюю библиотеку в Web APi - тогда вы можете использовать 'await', и контроллер вернется только после завершения задачи. – Fabio
Если использовать ключевое слово ожидания в коде не имеет смысла, вы можете добавить «.GetAwaiter(). GetResult();» до конца вызова async SendGrid, и он будет ожидать завершения функции async. – Kyle
В асинхронном методе ASP: NET Web API используется для более эффективного использования потоков. В WPF или Winforms асинхронные методы освободят поток пользовательского интерфейса для другой операции, в то время как Task завершает работу, что делает UI «отзывчивым» с помощью «неблокирующего» потока пользовательского интерфейса. – Fabio