private void startButton_Click(object sender, RoutedEventArgs e) { var id = count++; cancelable = new SingleAssignmentDisposable(); ( from _1 in Future.Start(() => { Debug.WriteLine($"{id} Subscribed."); return(id); }) from _2 in Future.Delay(TimeSpan.FromSeconds(1), TaskPoolScheduler.Default) select id ) .Subscribe(value => { if (cancelable.IsDisposed) { Debug.WriteLine($"{id} Canceled."); return; } Debug.WriteLine($"{id} Result = " + value); }, error => { Debug.WriteLine($"{id} Error = " + error.Message); }, () => { Debug.WriteLine($"{id} Completed."); }); }