await не ждет ответа покоя C # .netCore - PullRequest
0 голосов
/ 20 июня 2019

У меня есть клиент, который должен делать последовательные вызовы покоя, вызов по отдыху выполняет некоторые функции и имеет состояние. Параллельно с выполнением вызова rest клиент должен каждые несколько секунд опрашивать сервер, чтобы проверить состояние процесса на стороне сервера (чтобы убедиться, что сервер завершил работу с функциональностью, которая выполнялась в результате первоначального вызова rest. .

У клиента есть следующие звонки:

 await runMultiScan(scanId, exitActions);
 handleExitActions(exitActions);

и runMultiScan реализованы следующим образом:

    private async Task runMultiScan(Guid scanId, List<Action> exitActions)
    {                        
       var client = new RestClient(baseURL);

        var request = new RestRequest(@"api/scans", Method.POST);
        request.AddJsonBody(new Scan
        {
            sid = scanId.ToString(),
            scanPath = scansParentPath

        });
        var cancellationTokenSource = new CancellationTokenSource();
        await client.ExecuteTaskAsync(request, cancellationTokenSource.Token);
    }

Параллельно у меня есть функция getStatus, которая также выполняет вызов rest на сервер. Странно то, что после того, как вызов rest в «runMultiScan» занимает несколько минут, он выходит из режима ожидания и переходит к handleExitActions(exitActions);

Хотя сервер еще не завершил запрос RestRequest:

    [HttpPost]
    public void Post([FromBody] ScanData scanInfo)
    {

       currentScan = new Scan(scanInfo);
      currentScan.runScan();                       

    }

и процесс на сервере все еще находится внутри runScan и не вернулся. В чем может быть причина такого поведения (ждите, пока вы не дожидаетесь окончания публикации)?

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Не уверен, но если я правильно помню, у класса RestClient по умолчанию установлено время ожидания 100 секунд?Таким образом, функция на сервере занимает более 100 секунд, тайм-ауты RestClient, так что должно быть.Проверьте на сервере, что не так, потенциальная тупик ...?

0 голосов
/ 20 июня 2019

Это был тайм-аут! Спасибо, Голобич!

...