У меня есть веб-сервис, вызывающий класс с помощью backgroundworker, и когда я возвращаю статус 200, я получаю это исключение в моем клиенте REST:
An asynchronous module or handler completed while an asynchronous operation was still pending.
Я выполнил свою службу следующим образом:
[Route("/service")]
[HttpPost]
public HttpResponseMessage generate(String value)
{
Service service = new Service();
service.Execute();
return Request.CreateResponse(HttpStatusCode.OK);
}
И вот мой класс с фоном:
public class Service
{
private BackgroundWorker worker = new BackgroundWorker();
public void Execute(Client client)
{
worker = new BackgroundWorker
{
WorkerReportsProgress = true,
WorkerSupportsCancellation = true
};
worker.DoWork += (obj, e) => GenerateContent(client);
worker.RunWorkerCompleted += (obj, e) => GenerationCompleted(client.Token);
worker.RunWorkerAsync();
}
private void GenerateContent(Client client)
{
//doStuff
}
private void GenerationCompleted(String token)
{
// TODO
Console.WriteLine("Finished");
}
}
Что не так с этой реализацией?
благодаря
Метод Execute
вернется сразу после запуска BackgroundWorker
(вместо ожидания выполнения GenerateContent
и GenerationCompleted
). Таким образом, ваша служба вернет результат HTTP 200 клиенту, пока GenerateContent
все еще работает.