CancellationTokenSource Sınıf

Tanım

CancellationTokenİptal edilmesi gereken bir bildirir.Signals to a CancellationToken that it should be canceled.

public ref class CancellationTokenSource : IDisposable
public ref class CancellationTokenSource sealed : IDisposable
public class CancellationTokenSource : IDisposable
[System.Runtime.InteropServices.ComVisible(false)]
public sealed class CancellationTokenSource : IDisposable
[System.Runtime.InteropServices.ComVisible(false)]
public class CancellationTokenSource : IDisposable
type CancellationTokenSource = class
    interface IDisposable
[<System.Runtime.InteropServices.ComVisible(false)>]
type CancellationTokenSource = class
    interface IDisposable
Public Class CancellationTokenSource
Implements IDisposable
Public NotInheritable Class CancellationTokenSource
Implements IDisposable
Devralma
CancellationTokenSource
Öznitelikler
Uygulamalar

Örnekler

Aşağıdaki örnek, on iki farklı gereçden 10 integral değeri okuyan bir veri toplama uygulamasına öykünmek için rastgele bir sayı Oluşturucu kullanır.The following example uses a random number generator to emulate a data collection application that reads 10 integral values from eleven different instruments. Sıfır değeri, ölçümün bir gereç için başarısız olduğunu gösterir, bu durumda işlem iptal edilmelidir ve genel bir ortalama hesaplanmamalıdır.A value of zero indicates that the measurement has failed for one instrument, in which case the operation should be cancelled and no overall mean should be computed.

İşlemin olası iptalinin işlenmesi için, örnek bir CancellationTokenSource nesneye iletilen bir iptal belirteci üreten bir nesne oluşturur TaskFactory .To handle the possible cancellation of the operation, the example instantiates a CancellationTokenSource object that generates a cancellation token which is passed to a TaskFactory object. TaskFactoryİçindeki nesnesi, belirli bir gereç için readusing 'leri toplamaktan sorumlu görevlerin her birine iptal belirtecini geçirir.The TaskFactory object in turn passes the cancellation token to each of the tasks responsible for collecting readings for a particular instrument. TaskFactory.ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken)Yöntemi, ortalaması yalnızca tüm kullanımlar başarıyla toplandıktan sonra hesaplandığından emin olmak için çağrılır.The TaskFactory.ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken) method is called to ensure that the mean is computed only after all readings have been gathered successfully. Bir görev iptal edildiğinden, TaskFactory.ContinueWhenAll Yöntem çağrısı bir özel durum oluşturur.If a task has not because it has been cancelled, the call to the TaskFactory.ContinueWhenAll method throws an exception.

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      // Define the cancellation token.
      CancellationTokenSource source = new CancellationTokenSource();
      CancellationToken token = source.Token;

      Random rnd = new Random();
      Object lockObj = new Object();
      
      List<Task<int[]>> tasks = new List<Task<int[]>>();
      TaskFactory factory = new TaskFactory(token);
      for (int taskCtr = 0; taskCtr <= 10; taskCtr++) {
         int iteration = taskCtr + 1;
         tasks.Add(factory.StartNew( () => {
                                       int value;
                                       int[] values = new int[10];
                                       for (int ctr = 1; ctr <= 10; ctr++) {
                                          lock (lockObj) {
                                             value = rnd.Next(0,101);
                                          }
                                          if (value == 0) { 
                                             source.Cancel();
                                             Console.WriteLine("Cancelling at task {0}", iteration);
                                             break;
                                          }   
                                          values[ctr-1] = value; 
                                       }
                                       return values;
                                    }, token));   
      }
      try {
         Task<double> fTask = factory.ContinueWhenAll(tasks.ToArray(), 
                                                      (results) => {
                                                         Console.WriteLine("Calculating overall mean...");
                                                         long sum = 0;
                                                         int n = 0; 
                                                         foreach (var t in results) {
                                                            foreach (var r in t.Result) {
                                                                  sum += r;
                                                                  n++;
                                                               }
                                                         }
                                                         return sum/(double) n;
                                                      } , token);
         Console.WriteLine("The mean is {0}.", fTask.Result);
      }   
      catch (AggregateException ae) {
         foreach (Exception e in ae.InnerExceptions) {
            if (e is TaskCanceledException)
               Console.WriteLine("Unable to compute mean: {0}", 
                                 ((TaskCanceledException) e).Message);
            else
               Console.WriteLine("Exception: " + e.GetType().Name);
         }
      }
      finally {
         source.Dispose();
      }
   }
}
// Repeated execution of the example produces output like the following:
//       Cancelling at task 5
//       Unable to compute mean: A task was canceled.
//       
//       Cancelling at task 10
//       Unable to compute mean: A task was canceled.
//       
//       Calculating overall mean...
//       The mean is 5.29545454545455.
//       
//       Cancelling at task 4
//       Unable to compute mean: A task was canceled.
//       
//       Cancelling at task 5
//       Unable to compute mean: A task was canceled.
//       
//       Cancelling at task 6
//       Unable to compute mean: A task was canceled.
//       
//       Calculating overall mean...
//       The mean is 4.97363636363636.
//       
//       Cancelling at task 4
//       Unable to compute mean: A task was canceled.
//       
//       Cancelling at task 5
//       Unable to compute mean: A task was canceled.
//       
//       Cancelling at task 4
//       Unable to compute mean: A task was canceled.
//       
//       Calculating overall mean...
//       The mean is 4.86545454545455.
Imports System.Collections.Generic
Imports System.Threading
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      ' Define the cancellation token.
      Dim source As New CancellationTokenSource()
      Dim token As CancellationToken = source.Token

      Dim lockObj As New Object()
      Dim rnd As New Random

      Dim tasks As New List(Of Task(Of Integer()))
      Dim factory As New TaskFactory(token)
      For taskCtr As Integer = 0 To 10
         Dim iteration As Integer = taskCtr + 1
         tasks.Add(factory.StartNew(Function()
                                       Dim value, values(9) As Integer
                                       For ctr As Integer = 1 To 10
                                          SyncLock lockObj
                                             value = rnd.Next(0,101)
                                          End SyncLock
                                          If value = 0 Then 
                                             source.Cancel
                                             Console.WriteLine("Cancelling at task {0}", iteration)
                                             Exit For
                                          End If   
                                          values(ctr-1) = value 
                                       Next
                                       Return values
                                    End Function, token))   
         
      Next
      Try
         Dim fTask As Task(Of Double) = factory.ContinueWhenAll(tasks.ToArray(), 
                                                         Function(results)
                                                            Console.WriteLine("Calculating overall mean...")
                                                            Dim sum As Long
                                                            Dim n As Integer 
                                                            For Each t In results
                                                               For Each r In t.Result
                                                                  sum += r
                                                                  n+= 1
                                                               Next
                                                            Next
                                                            Return sum/n
                                                         End Function, token)
         Console.WriteLine("The mean is {0}.", fTask.Result)
      Catch ae As AggregateException
         For Each e In ae.InnerExceptions
            If TypeOf e Is TaskCanceledException
               Console.WriteLine("Unable to compute mean: {0}", 
                                 CType(e, TaskCanceledException).Message)
            Else
               Console.WriteLine("Exception: " + e.GetType().Name)
            End If   
         Next
      Finally
         source.Dispose()
      End Try                                                          
   End Sub
End Module
' Repeated execution of the example produces output like the following:
'       Cancelling at task 5
'       Unable to compute mean: A task was canceled.
'       
'       Cancelling at task 10
'       Unable to compute mean: A task was canceled.
'       
'       Calculating overall mean...
'       The mean is 5.29545454545455.
'       
'       Cancelling at task 4
'       Unable to compute mean: A task was canceled.
'       
'       Cancelling at task 5
'       Unable to compute mean: A task was canceled.
'       
'       Cancelling at task 6
'       Unable to compute mean: A task was canceled.
'       
'       Calculating overall mean...
'       The mean is 4.97363636363636.
'       
'       Cancelling at task 4
'       Unable to compute mean: A task was canceled.
'       
'       Cancelling at task 5
'       Unable to compute mean: A task was canceled.
'       
'       Cancelling at task 4
'       Unable to compute mean: A task was canceled.
'       
'       Calculating overall mean...
'       The mean is 4.86545454545455.

Açıklamalar

.NET Framework 4 ' te başlayarak, .NET Framework iki nesne içeren zaman uyumsuz veya uzun süreli zaman uyumlu işlemler için birlikte çalışan bir birleştirilmiş model kullanır:Starting with the .NET Framework 4, the .NET Framework uses a unified model for cooperative cancellation of asynchronous or long-running synchronous operations that involves two objects:

Birlikte çalışırken iptal modelinin uygulanması için genel bir örüntü şunlardır:The general pattern for implementing the cooperative cancellation model is:

Daha fazla bilgi için bkz. yönetilen Iş parçacıklarında iptal.For more information, see Cancellation in Managed Threads.

Önemli

Bu tür, IDisposable arabirimini uygular.This type implements the IDisposable interface. Türünün bir örneğini kullanmayı bitirdiğinizde, bunu doğrudan veya dolaylı olarak atabilirsiniz.When you have finished using an instance of the type, you should dispose of it either directly or indirectly. Türü doğrudan atmak için, Dispose yöntemini bir try / catch blokta çağırın.To dispose of the type directly, call its Dispose method in a try/catch block. Dolaylı olarak atmak için using (C# dilinde) veya (Visual Basic) gibi bir dil yapısı kullanın Using .To dispose of it indirectly, use a language construct such as using (in C#) or Using (in Visual Basic). Daha fazla bilgi için, interface konusunun "IDisposable uygulayan bir nesne kullanma" bölümüne bakın IDisposable .For more information, see the "Using an Object that Implements IDisposable" section in the IDisposable interface topic.

Oluşturucular

CancellationTokenSource()

CancellationTokenSource sınıfının yeni bir örneğini başlatır.Initializes a new instance of the CancellationTokenSource class.

CancellationTokenSource(Int32)

Bir CancellationTokenSource sınıfın belirtilen gecikmeden sonra iptal edilecek yeni bir örneğini başlatır (milisaniye cinsinden).Initializes a new instance of the CancellationTokenSource class that will be canceled after the specified delay in milliseconds.

CancellationTokenSource(TimeSpan)

CancellationTokenSourceBelirtilen süre geçtikten sonra iptal edilecek sınıfın yeni bir örneğini başlatır.Initializes a new instance of the CancellationTokenSource class that will be canceled after the specified time span.

Özellikler

IsCancellationRequested

Bunun için iptal istenip istenmediğini alır CancellationTokenSource .Gets whether cancellation has been requested for this CancellationTokenSource.

Token

Bununla CancellationToken ilişkili olan öğesini alır CancellationTokenSource .Gets the CancellationToken associated with this CancellationTokenSource.

Yöntemler

Cancel()

İptal için bir istek iletişim kurar.Communicates a request for cancellation.

Cancel(Boolean)

Bir iptal isteği ister ve bir özel durum oluşursa geri çağırmaların ve iptal edilebilir işlemlerin işlenip işlenmeyeceğini belirtir.Communicates a request for cancellation, and specifies whether remaining callbacks and cancelable operations should be processed if an exception occurs.

CancelAfter(Int32)

Bu CancellationTokenSource , belirtilen milisaniye sayısından sonra bir iptal işlemi zamanlar.Schedules a cancel operation on this CancellationTokenSource after the specified number of milliseconds.

CancelAfter(TimeSpan)

Belirtilen süre geçtikten sonra bu işlem için bir iptal işlemi zamanlar CancellationTokenSource .Schedules a cancel operation on this CancellationTokenSource after the specified time span.

CreateLinkedTokenSource(CancellationToken)

CancellationTokenSourceSağlanan belirteç iptal edildi durumundaysa, iptal edildi durumunda olacak bir oluşturur.Creates a CancellationTokenSource that will be in the canceled state when the supplied token is in the canceled state.

CreateLinkedTokenSource(CancellationToken, CancellationToken)

CancellationTokenSourceKaynak belirteçlerden herhangi biri iptal edildiğinde iptal edilmiş durumunda olacak bir oluşturur.Creates a CancellationTokenSource that will be in the canceled state when any of the source tokens are in the canceled state.

CreateLinkedTokenSource(CancellationToken[])

CancellationTokenSourceBelirtilen dizideki kaynak belirteçlerden herhangi biri iptal edildiğinde iptal edilmiş durumda olacak bir oluşturur.Creates a CancellationTokenSource that will be in the canceled state when any of the source tokens in the specified array are in the canceled state.

Dispose()

CancellationTokenSource sınıfının geçerli örneği tarafından kullanılan tüm kaynakları serbest bırakır.Releases all resources used by the current instance of the CancellationTokenSource class.

Dispose(Boolean)

Sınıfı tarafından kullanılan yönetilmeyen kaynakları serbest bırakır CancellationTokenSource ve isteğe bağlı olarak yönetilen kaynakları yayınlar.Releases the unmanaged resources used by the CancellationTokenSource class and optionally releases the managed resources.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.Determines whether the specified object is equal to the current object.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi olarak işlev görür.Serves as the default hash function.

(Devralındığı yer: Object)
GetType()

TypeGeçerli örneği alır.Gets the Type of the current instance.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli bir basit kopyasını oluşturur Object .Creates a shallow copy of the current Object.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.Returns a string that represents the current object.

(Devralındığı yer: Object)

Şunlara uygulanır

İş Parçacığı Güvenliği

Tüm ortak ve korumalı üyeleri CancellationTokenSource iş parçacığı açısından güvenlidir ve, Dispose() yalnızca nesnedeki tüm işlemler tamamlandığında kullanılması gereken, özel durumu ile birden fazla iş parçacığından aynı anda kullanılabilir CancellationTokenSource .All public and protected members of CancellationTokenSource are thread-safe and may be used concurrently from multiple threads, with the exception of Dispose(), which must only be used when all other operations on the CancellationTokenSource object have completed.