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:
CancellationTokenSourceKendi özelliği aracılığıyla iptal belirteci sağlayan Token ve ya da metodunu çağırarak bir iptal iletisi gönderen nesne Cancel CancelAfter .A CancellationTokenSource object, which provides a cancellation token through its Token property and sends a cancellation message by calling its Cancel or CancelAfter method.
CancellationTokenİptalin istenip istenmediğini gösteren bir nesne.A CancellationToken object, which indicates whether cancellation is requested.
Birlikte çalışırken iptal modelinin uygulanması için genel bir örüntü şunlardır:The general pattern for implementing the cooperative cancellation model is:
CancellationTokenSourceAyrı ayrı iptal belirteçlerine yönelik iptali bildirimini yöneten ve gönderen bir nesne örneği oluşturur.Instantiate a CancellationTokenSource object, which manages and sends cancellation notification to the individual cancellation tokens.
Özelliği tarafından döndürülen belirteci, CancellationTokenSource.Token iptal için dinleyen her bir göreve veya iş parçacığına geçirin.Pass the token returned by the CancellationTokenSource.Token property to each task or thread that listens for cancellation.
CancellationToken.IsCancellationRequestedİptal belirtecini alan işlemlerden yöntemi çağırın.Call the CancellationToken.IsCancellationRequested method from operations that receive the cancellation token. Her görev veya iş parçacığının bir iptal isteğine yanıt vermesi için bir mekanizma sağlar.Provide a mechanism for each task or thread to respond to a cancellation request. Bir işlemi iptal etmeyi seçip tam olarak nasıl yapadığınıza bağlı olarak, uygulama mantığınıza göre değişir.Whether you choose to cancel an operation, and exactly how you do it, depends on your application logic.
CancellationTokenSource.Cancelİptal bildirimi sağlamak için yöntemini çağırın.Call the CancellationTokenSource.Cancel method to provide notification of cancellation. Bu CancellationToken.IsCancellationRequested , iptal belirtecinin her kopyasında özelliğini olarak ayarlar
true.This sets the CancellationToken.IsCancellationRequested property on every copy of the cancellation token totrue.DisposeNesnesiyle işiniz bittiğinde yöntemi çağırın CancellationTokenSource .Call the Dispose method when you are finished with the CancellationTokenSource object.
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.