我有一个必须连续进行REST调用的客户端,REST调用将执行某些功能并处于状态。在运行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函数,该函数还对服务器进行一次调用。
奇怪的是,在“ runMultiScan”中的rest调用花费了几分钟之后,它退出了等待状态并转到handleExitActions(exitActions);
虽然服务器尚未达到RestRequest的完成:
[HttpPost]
public void Post([FromBody] ScanData scanInfo)
{
currentScan = new Scan(scanInfo);
currentScan.runScan();
}
,并且服务器上的进程仍在runScan内,并且未返回。 发生这种行为的原因可能是什么(等待不等待发布完成)?
答案 0 :(得分:0)
那是超时!谢谢你golobich!
答案 1 :(得分:0)
不确定,请记住我是否正确,RestClient类的默认超时设置为100秒?因此服务器上的功能要花费100多个,RestClient超时也应该如此。检查服务器出了什么问题,潜在的死锁...?