У меня ситуация, когда масштабируемость имеет первостепенное значение. У меня есть конечная точка API, которая должна позвонить на сторонний веб-сервис, и для завершения может потребоваться более 10 секунд. Я беспокоюсь о том, что веб-запросы сложены на нашем сервере, ожидая завершения запросов сторонних разработчиков. Мне нужно убедиться, что запросы на «StartJob» возвращаются немедленно, и работа фактически выполняется в фоновом режиме. Каков наилучший способ сделать это?Правильный способ сделать асинхронный вызов
// Client polls this endpoint to find out if job is complete
public ActionResult GetResults(int jobId)
{
return Content(Job.GetById(jobId));
}
//Client kicks off job with this endpoint
public ActionResult StartJob()
{
//Create a new job record
var job = new Job();
job.Save();
//start the job on a background thread and let IIS return it's current thread immediately
StartJob(); //????
return Content(job.Id);
}
//The job consists of calling a 3rd party web service which could take 10+ seconds.
private void StartJob(long jobId)
{
var client = new WebClient();
var response = client.downloadString("http://some3rdparty.com/dostuff");
var job = Job.GetById(jobId);
job.isComplete = true;
job.Save();
}
Обратите внимание, что Задача 4.0, а не 4.5. Какую версию ты используешь? Задачи - это * фантастический инструмент, даже без «ожидания». – Servy
Я использую .NET 4.0 – Micah
«Задача или асинхронное ключевое слово джаз» определенно звучит как хорошее решение - пожалуйста, пересматривайте, если вы можете его использовать. * MEANWHILE * ... что * * вы используете? Каковы наилучшие варианты, которые вы рассматриваете? – paulsm4