I'm trying to hit my simple server's endpoint using the following code, but I keep getting "A task was canceled."
during the await
call. The server's logs don't show any errors and cts.IsCancellationRequested == false
, however e.CancellationToken.IsCancellationRequested == true
. Any advice on how to track down the cause of this cancellation? At the very least, how can I tell if it's coming from the front end or the server endpoint?
private async Task<string> SendSingleRequestToDlis(
HttpClient client,
StringContent requestData)
{
int timeout = 600000; // in ms
string dlisEndpoint = "myendpointhere";
string response;
using (var cts = new CancellationTokenSource(timeout))
{
//send
HttpResponseMessage request;
try
{
request = await client.PostAsync(dlisEndpoint, requestData);
}
catch (Exception e)
{
throw new Exception("Could not establish conection to model hosted on DLIS.", e);
}
....
CodePudding user response:
You are not using your CancellationToken
so don't implement it. Just use this:
string dlisEndpoint = "myendpointhere";
string response;
HttpResponseMessage request;
try
{
request = await client.PostAsync(dlisEndpoint, requestData);
}
catch (Exception e)
{
throw new Exception("Could not establish conection to model hosted on DLIS.", e);
}
If you wanted to use the cancellation token you actually have to pass it down into the client.
request = await client.PostAsync(dlisEndpoint, requestData, cts.Source);
CodePudding user response:
At the very least, how can I tell if it's coming from the front end or the server endpoint?
You can know it's at the client because you're seeing an OperationCanceledException
. A server can just return a response code, which you would see as an HttpRequestException
.
i timed it just now and the cancellation happens at exactly 100s
This is the default value of the HttpClient.Timeout
property. Set this property higher (or to Timeout.InfiniteTimeSpan
) at the point where the HttpClient
is created (or configured, if the HttpClient
is injected).