У меня есть клиент, который должен делать последовательные вызовы покоя, вызов по отдыху выполняет некоторые функции и имеет состояние. Параллельно с выполнением вызова 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 и не вернулся.
В чем может быть причина такого поведения (ждите, пока вы не дожидаетесь окончания публикации)?