using System.Reactive.Linq;
using System.Threading.Tasks;
public static void Main()
CancellationToken capturedToken = default(CancellationToken);
var subscription = Observable.FromAsync(async token =>
token.Register(() => Console.WriteLine("Token canceled"));
await Task.Delay(Timeout.Infinite, token);
.TakeUntil(Observable.Timer(TimeSpan.FromMilliseconds(500)))
.Finally(() => Console.WriteLine("The observable was terminated"))
var cts = (CancellationTokenSource)(typeof(CancellationToken)
.GetField("m_source", BindingFlags.NonPublic | BindingFlags.Instance)
.GetValue(capturedToken));
bool disposed = (bool)(typeof(CancellationTokenSource)
.GetField("m_disposed", BindingFlags.NonPublic | BindingFlags.Instance)
Console.WriteLine("IsCancellationRequested: {0}", cts.IsCancellationRequested);
Console.WriteLine("IsDisposed: {0}", disposed);