Is it recommended for ASP.NET Web API actions to always include a CancellationToken?
Note: This is basically a question from Stack Overflow that was closed for a very long period of time and I fear it might get closed again as primarily opinion based.
I am wondering if my ASP.NET Core 3.1+ Web API should support cancellation for all its methods or only for those which are particularly long. Example:
[Route("api/[controller]")]
public class FooController : ControllerBase
{
private readonly AppDbContext _dbContext;
public FooController()
{
}
[HttpGet("{id}")]
public async Task<ActionResult<FooModel>> GetAsync(int id, CancellationToken ct = default)
{
// some await to async operation here
}
}
An obvious benefit is that all actions are cancellable, but this requires passing the token everywhere (not sure, but some tools such as R# might automatically detect when this is forgotten and suggest/apply automatically to add the token).
I am more interested in the performance aspect of this (e.g. does it make sense for calls that are known to be short?).
1 answer
A cancellation token doesn't inherently do anything. It's up to the code which does the work to call ThrowIfCancellationRequested
. If the token isn't passed on and isn't explicitly checked then there's no point passing it in.
If the real question is whether to call ThrowIfCancellationRequested
in a trivial method: if it's truly trivial then don't.
1 comment
It won't get closed here, this is more open discussion. But try to include detail. — 10 Rep 6 months ago