In a particular business scenario, there are multiple tasks running in parallel. I am using `CancellationToken` to cancel these tasks whenever the end user wishes. 
I also need to restart all the tasks after they have run for a particular period of time, lets say 3 hours. For this, I use:

```
_cts.CancelAfter(TimeSpan.FromHours(3))

```

This works fine. However, when 3 hours is up, the tasks automatically cancel and come out. Hence I am unable to detect the two scenarios separately viz: Was the cancellation due to user wanting to cancel or because 3 hours was up.

I am aware we can use a `Datetime` variable containing the last run time and push this inside our task. We can then terminate the task based on the current time difference and the last time it ran. But I was more looking at ways how TPL can help solve this.