private void RunTracked(CapturedRunnable runnable) { runnable.Task = runnable.Tracked.RunAsync(runnable.Lifetime.Token).ContinueWith(result => { trackedRunnables.TryRemove(runnable.Id, out _); }); }
public bool TryAdd(TId id, TTracked runnable, CancellationToken token = default) { var lifetime = CancellationTokenSource.CreateLinkedTokenSource(trackerLifetime.Token, token); var captured = new CapturedRunnable(id, runnable, lifetime); if (!trackedRunnables.TryAdd(id, captured)) { return(false); } RunTracked(captured); return(true); }