Don't pass a cancellation token to Task.Run: that token just cancels the scheduling of the delegate to the thread pool; once that delegate starts running (which happens pretty much immediately), that cancellation token is ignored[1]
Task.Run
Cancellation, Part 1- Overview ↩︎