У меня есть ASP.Net MVC-контроллер, и он вызывает метод, который отправит заказ на покупку. Однако я хочу, чтобы проводка заказа на поставку происходила в фоновом режиме, я не хочу, чтобы контроллер дождался отправки заказа на поставку перед возвратом. Публикация занимает много времени, и действительно нет ничего, что может сделать пользователь веб-сайта, если есть ошибка, кто-то еще должен быть предупрежден.C# async ждут от контроллера
Это казалось хорошим случаем для использования функции ожидания C# и асинхронности, но я изо всех сил стараюсь заставить ее работать. Я попытался настроить метод, который размещает заказ на поставку как асинхронный метод. Однако я столкнулся с следующими проблемами:
- Класс, который имеет метод, который публикует заказ на поставку, реализует интерфейс. Контроллер использует интерфейс, и вы не можете поместить асинхронный метод в интерфейс. Поэтому я попытался разрешить это, вернув метод в задачу.
- Метод отправки заказа на поставку не выполняется асинхронно, он работает синхронно, как обычный метод.
Что я делаю неправильно? Вот код:
public class POReceivingController : Controller
{
IPOReceivingService poservice;
public POReceivingController(IPOReceivingService poserviceparm)
{
poservice = poserviceparm;
}
public ActionResult PostPO(string shipmentid)
{
poservice.PostPOAsync(shipmentid);
}
}
public interface IPOReceivingService
{
Task PostPOAsync(string shipmentidparm);
}
public class POReceivingService : IPOReceivingService
{
public async Task PostPOAsync(string shipmentidparm)
{
// Code to post PO and alert correct people if there is an error.
}
}
http://stackoverflow.com/a/18509424 –
Ссылка при условии от @RobertHarvey есть объяснение, почему вы не должны делать методы «огонь и забыть» ... Если у вас действительно есть длительные операции, вы должны рассмотреть некоторую дополнительную систему, которая будет выполнять операции и позволить пользователю отслеживать прогресс/завершение отдельно. –
Как служба Windows. –