/// <summary> /// Stellt den Empfang einer Quelle sicher. /// </summary> /// <param name="source">Die gewünschte Quelle.</param> public void EnsureFeed(SourceSelection source) { // Unregister all outstanding requests ResetFeeds(); // Stop current reader if active - and wait for cancel to finish if (m_groupReader != null) { m_groupReader.Cancel(); m_groupReader.Wait(); } // Create new m_groupReader = ProviderDevice.Activate(source); m_feeds = _NoFeeds; // Start processing m_feedAwaiter = m_groupReader.ContinueWith(task => { // Load feed data var sources = task.Result; if (sources != null) { if (IsAllocated) { return(m_feeds = sources.Select(sourceOnGroup => new Feed(sourceOnGroup, this)).ToArray()); } } // None return(null); }); }
/// <summary> /// Beendet die Nutzung dieses Senders. /// </summary> public void RefreshSourceInformation() { if (m_reader != null) { m_reader.Cancel(); m_reader.Wait(); } m_reader = null; }
static void Main(string[] args) { Guid lastID = default(Guid); List <CancellableTask> cancellableTasks = new List <CancellableTask>(); for (int i = 0; i < 10; i++) { CancellableTask task = new CancellableTask(() => { Console.WriteLine("New task!"); Thread.Sleep(3000); }); cancellableTasks.Add(task); lastID = task.ID; } CancellableTask cancellableTask = cancellableTasks.FirstOrDefault(x => x.ID == lastID); if (cancellableTask != null) { cancellableTask.Cancel(); } }
private void StopTask(CancellableTask _task) { _task.Cancel(); _task.WaitForFinished(); _task.Dispose(); }