C # - Backgroundworker и REST сервис

1

У меня есть веб-сервис, вызывающий класс с помощью 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");

    }
}

Что не так с этой реализацией?

благодаря

Теги:
rest
asynchronous
backgroundworker

1 ответ

0

Метод Execute вернется сразу после запуска BackgroundWorker (вместо ожидания выполнения GenerateContent и GenerationCompleted). Таким образом, ваша служба вернет результат HTTP 200 клиенту, пока GenerateContent все еще работает.

  • 0
    Как я могу избежать этой проблемы? Ждать выполнения, прежде чем вернуть HTTP 200?
  • 0
    Я изменил это для темы, и все работает :)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню