Aracılığıyla paylaş


CancellationTokenSource Sınıf

Tanım

bir'e CancellationToken iptal edilmesi gerektiğini bildirir.

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 örnekte, on bir farklı araçtan 10 tamsayı değeri okuyan bir veri toplama uygulamasına öykünmek için rastgele bir sayı oluşturucu kullanılır. Sıfır değeri ölçümün bir alet için başarısız olduğunu gösterir. Bu durumda işlem iptal edilmeli ve genel ortalama hesaplanmamalıdır.

İşlemin olası iptalini işlemek için örnek, bir nesneye geçirilen bir CancellationTokenSource iptal belirteci oluşturan bir TaskFactory nesnenin örneğini oluşturur. Nesne TaskFactory de iptal belirtecini belirli bir alet için okumaları toplamaktan sorumlu görevlerin her birine geçirir. yöntemi TaskFactory.ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken) , ortalamanın yalnızca tüm okumalar başarıyla toplandıktan sonra hesaplandığından emin olmak için çağrılır. Bir görev iptal edildiğinden tamamlanmamışsa, yöntemine TaskFactory.ContinueWhenAll yapılan çağrı bir özel durum oluşturur.

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'den başlayarak ,NET Framework, iki nesne içeren zaman uyumsuz veya uzun süre çalışan zaman uyumlu işlemlerin işbirliğiyle iptali için birleşik bir model kullanır:

İşbirlikçi iptal modelini uygulamaya yönelik genel düzen şu şekildedir:

Daha fazla bilgi için bkz. Yönetilen İş Parçacıklarında İptal.

Önemli

Bu tür IDisposable arabirimini uygular. Türün bir örneğini kullanmayı bitirdiğinizde, doğrudan veya dolaylı olarak atmalısınız. Türü doğrudan atabilmek için, bir Disposetry/ bloğunda finally yöntemini çağırın. Bunu dolaylı olarak atmak için using (C#'de) veya Using (Visual Basic'te) gibi bir dil yapısı kullanın. Daha fazla bilgi için arabirim konusunun "IDisposable Uygulayan Bir Nesne Kullanma" bölümüne IDisposable bakın.

Oluşturucular

Name Description
CancellationTokenSource()

CancellationTokenSource sınıfının yeni bir örneğini başlatır.

CancellationTokenSource(Int32)

Belirtilen gecikmeden CancellationTokenSource sonra milisaniye cinsinden iptal edilecek sınıfın yeni bir örneğini başlatır.

CancellationTokenSource(TimeSpan, TimeProvider)

Belirtilen TimeSpanöğesinden CancellationTokenSource sonra iptal edilecek sınıfın yeni bir örneğini başlatır.

CancellationTokenSource(TimeSpan)

Belirtilen zaman aralığından CancellationTokenSource sonra iptal edilecek sınıfın yeni bir örneğini başlatır.

Özellikler

Name Description
IsCancellationRequested

Bu CancellationTokenSourceiçin iptal isteyip istemediğinizi alır.

Token

bu CancellationTokenSourceile ilişkilendirilmiş öğesini CancellationToken alır.

Yöntemler

Name Description
Cancel()

İptal isteği iletir.

Cancel(Boolean)

İptal isteği iletir ve bir özel durum oluşursa kalan geri çağırmaların ve iptal edilebilir işlemlerin işlenip işlenmeyeceğini belirtir.

CancelAfter(Int32)

Belirtilen sayıda milisaniyeden sonra bu CancellationTokenSource işlem için bir iptal işlemi zamanlar.

CancelAfter(TimeSpan)

Belirtilen zaman aralığından sonra bu CancellationTokenSource işlem için bir iptal işlemi zamanlar.

CancelAsync()

İptal isteğini zaman uyumsuz olarak iletir.

CreateLinkedTokenSource(CancellationToken, CancellationToken)

Kaynak belirteçlerden herhangi biri iptal edildi durumunda olduğunda iptal edildi durumunda olacak bir CancellationTokenSource oluşturur.

CreateLinkedTokenSource(CancellationToken)

Sağlanan belirteç iptal edildi durumunda olduğunda iptal edildi durumunda olacak bir CancellationTokenSource oluşturur.

CreateLinkedTokenSource(CancellationToken[])

Belirtilen dizideki kaynak belirteçlerden herhangi biri iptal edildi durumunda olduğunda iptal edildi durumunda olacak bir CancellationTokenSource oluşturur.

CreateLinkedTokenSource(ReadOnlySpan<CancellationToken>)

Kaynak belirteçlerden herhangi biri iptal edildi durumunda olduğunda iptal edildi durumunda olacak bir CancellationTokenSource oluşturur.

Dispose()

Sınıfın geçerli örneği CancellationTokenSource tarafından kullanılan tüm kaynakları serbest bırakır.

Dispose(Boolean)

sınıfı tarafından CancellationTokenSource kullanılan yönetilmeyen kaynakları serbest bırakır ve isteğe bağlı olarak yönetilen kaynakları serbest bırakır.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

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

Varsayılan karma işlevi işlevi görür.

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

Geçerli örneğin Type alır.

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

Geçerli Objectbasit bir kopyasını oluşturur.

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

Geçerli nesneyi temsil eden bir dize döndürür.

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

İlişkili olmayan bir işlem için kullanılacak şekilde sıfırlamayı CancellationTokenSource dener.

Şunlara uygulanır

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

tüm genel ve korumalı üyeleri CancellationTokenSource iş parçacığı açısından güvenlidir ve yalnızca nesnedeki CancellationTokenSource diğer tüm işlemler tamamlandığında kullanılması gereken dışında Dispose()birden çok iş parçacığından eşzamanlı olarak kullanılabilir.

Ayrıca bkz.