public Task CustomJob(Action<int> jobAction, Action jobStopped, int speed)
{
var taskSource = new TaskCompletionSource<bool>();
if (jobAction == null)
throw new ArgumentNullException("jobAction");
CancellationTokenSource cancelSource = null;
var observer = Observer.Create<int>(
onNext: pos =>
{
jobAction.Invoke(pos);
},
onCompleted: () =>
{
jobStopped();
taskSource.SetResult(true);
});
cancelSource = this.timerJobRunner.AddTimerJobCounter(observer, speed);
Executor.Current.SetManagedTask(taskSource.Task, cancelSource);
return taskSource.Task;
}