Task.Delay does not check for cancellation by default. In order to cancel the task, you need to pass the cancellation token to Task.Delay so that it can observe the cancellation request.
await Task.Delay(3000, token);