Using a CancellationToken in .NET Core Web API

This blog is a guide on how to use a CancellationToken in a .NET Core Web API, using the default template example of the weather forecast.

Happy path scenario

To demonstrate this we will use the weather forecast endpoint, it returns details such as temperatures, the data is randomly generated. In a real world scenario this data could be stored in a SQL database or returned from another HTTP request. So when a person requests the local weather forecast there is a dependency, in this example imagine it is a datastore.

To test this out I added console messages so we can see what is going on. I also added a Task Delay of 5 seconds in order to mimic a database call. Using Postman I called the GET weather forecast endpoint, the console messages below were as expected, as were the number of results.

Exception paths

What would happen if…a user made the request then immediately closed the browser, navigated to a different website or made one request quickly followed by another? Let’s find out.

For the second attempt I called the weather forecast endpoint however cancelled the request. As you can see in the console output below the call completed although the request was cancelled and the results were still returned.

To solve this matter in order to protect our database and resources, we can use a CancellationToken. They are used to control the execution flow of the tasks, business logic or algorithm conditions.

Now the application will continue to process new requests however if a request is cancelled, it will throw a TaskCanceledException.

There are many advantages which include:

Summary

In summary, providing a cancellation token is good practice as it saves resources and time. There have been some changes around Cancellation in .NET 6, which is covered in a Microsoft blog ‘Performance Improvements in .NET 6’ .

This blog covered the basics of using a CancellationToken, for further reading:

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store