Home > Software design >  c# a task was canceled at the await call
c# a task was canceled at the await call

Time:04-06

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);
        }

    ....

enter image description here

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).

  • Related