James
James

Reputation: 63

Azure function HTTP Trigger not cancelling request

When I cancel my request from browser to a HTTP Trigger it does not cancel and continues execution when hosted on Azure.

My function example:

[FunctionName("Test")]
public async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req,
    CancellationToken cancellationToken,
    ILogger log)
{
    var allCancellationTokens = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, req.HttpContext.RequestAborted);

    await Task.Delay(30000, allCancellationTokens.Token);

    if (allCancellationTokens.IsCancellationRequested) {
        log.LogInformation("Request was cancelled!");
        return new StatusCodeResult(499);
    }

    return new OkObjectResult("Complete");
}

I have been testing the cancellation through Postman and axios cancel tokens. It works when I run the project locally and cancel it, but does not seem to cancel once it's published to azure.

My expected result would be that it throws an OperationCanceledException if I cancel the request during the await Task.Delay(30000, allCancellationTokens.Token); However when checking logs on Azure Functions, just seems to carry on execution and complete the function.

Steps to reproduce:

  1. Create a HTTP Trigger like the one defined above.
  2. Publish the app to Azure.
  3. Open the functions logs on Azure in the monitor section.
  4. Using Postman, send a request to this function and cancel the request (within the timeout period of 30 seconds).
  5. Won't cancel the request and will still execute.

Upvotes: 5

Views: 1761

Answers (1)

Mike Urnun MSFT
Mike Urnun MSFT

Reputation: 478

CancellationToken is helpful for implementing graceful shutdown of your Functions runtime host when it is notified by the Operating System that something has gone wrong to terminate it, please see the following answer for more: https://stackoverflow.com/a/63439515/528779

Upvotes: 1

Related Questions