adjusted CancelToken api to be more consistent