WithCancel try to do fn until context will cancel or fn return nil and will sleep in (logarithmic) duration of
unit (millisecond, second,etc) and not more than unit * maxSleep.
The return channel stream's fn error in each iteration and can be use for blocking or/and if needed