CancellationTokenSource Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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 örnek, on bir farklı aletten 10 tamsayı değeri okuyan bir veri toplama uygulamasına öykünmek için rastgele bir sayı oluşturucu kullanır. Sıfır değeri, ölçümün tek 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. Nesnesi 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 ancak tüm okumalar başarıyla toplandıktan sonra hesaplandığından emin olmak için çağrılır. Bir görev iptal edildiği için tamamlanmamışsa, yöntemine yapılan TaskFactory.ContinueWhenAll ç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:
CancellationTokenSource Özelliği aracılığıyla Token bir iptal belirteci sağlayan ve veya CancelAfter yöntemini çağırarak Cancel iptal iletisi gönderen bir nesne.
İptalin CancellationToken istenip istenmediğini gösteren bir nesnesi.
İşbirlikçi iptal modelini uygulamaya yönelik genel düzen şu şekildedir:
Tek tek iptal belirteçlerini yöneten ve bu belirteçlere iptal bildirimi gönderen bir CancellationTokenSource nesne örneği oluşturma.
özelliği tarafından CancellationTokenSource.Token döndürülen belirteci iptali dinleyen her göreve veya iş parçacığına geçirin.
İptal belirtecini CancellationToken.IsCancellationRequested alan işlemlerden yöntemini çağırın. Her görev veya iş parçacığının bir iptal isteğine yanıt vermesi için bir mekanizma sağlayın. Bir işlemi iptal etmeyi seçip seçmediğiniz ve bunu tam olarak nasıl yapacağınız uygulama mantığınıza bağlıdır.
CancellationTokenSource.Cancel İptal bildirimini sağlamak için yöntemini çağırın. Bu, iptal belirtecinin CancellationToken.IsCancellationRequested her kopyasındaki özelliğini olarak
true
ayarlar.Dispose nesnesiyle işiniz bittiğinde yöntemini çağırınCancellationTokenSource.
Daha fazla bilgi için bkz. Yönetilen İş Parçacıklarında İptal.
Önemli
Bu tür arabirimini IDisposable uygular. Türün bir örneğini kullanmayı bitirdiğinizde, doğrudan veya dolaylı olarak atmalısınız. Türü doğrudan atmak için yöntemini bir try
/finally
blok içinde çağırın.Dispose Bunu dolaylı olarak atmak için (C#'de) veya Using
(Visual Basic'te) gibi using
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
CancellationTokenSource() |
CancellationTokenSource sınıfının yeni bir örneğini başlatır. |
CancellationTokenSource(Int32) |
Milisaniye cinsinden belirtilen gecikmeden sonra iptal edilecek sınıfının yeni bir örneğini CancellationTokenSource başlatır. |
CancellationTokenSource(TimeSpan) |
Belirtilen zaman aralığından CancellationTokenSource sonra iptal edilecek sınıfının yeni bir örneğini başlatır. |
CancellationTokenSource(TimeSpan, TimeProvider) |
Belirtilen TimeSpanöğesinden CancellationTokenSource sonra iptal edilecek sınıfının yeni bir örneğini başlatır. |
Özellikler
IsCancellationRequested |
Bu CancellationTokenSourceiçin iptal istenip istenmediğini alır. |
Token |
bu CancellationTokenSourceile ilişkili öğesini CancellationToken alır. |
Yöntemler
Cancel() |
İptal isteği iletir. |
Cancel(Boolean) |
İptal isteğini 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şlemde 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) |
Sağlanan belirteç iptal edildi durumunda olduğunda iptal edilmiş durumda olacak bir CancellationTokenSource oluşturur. |
CreateLinkedTokenSource(CancellationToken, CancellationToken) |
Kaynak belirteçlerden herhangi biri iptal edildi durumunda olduğunda iptal edilmiş durumda olacak bir CancellationTokenSource oluşturur. |
CreateLinkedTokenSource(CancellationToken[]) |
Belirtilen dizideki kaynak belirteçlerden herhangi biri iptal edildi durumunda olduğunda iptal edilmiş durumda olacak bir CancellationTokenSource oluşturur. |
CreateLinkedTokenSource(ReadOnlySpan<CancellationToken>) |
bir'e CancellationToken iptal edilmesi gerektiğini bildirir. |
Dispose() |
CancellationTokenSource sınıfının geçerli örneği 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() |
Type Geçerli örneğini alır. (Devralındığı yer: Object) |
MemberwiseClone() |
Geçerli Objectöğesinin sığ bir kopyasını oluşturur. (Devralındığı yer: Object) |
ToString() |
Geçerli nesneyi temsil eden dizeyi döndürür. (Devralındığı yer: Object) |
TryReset() |
İlişkisiz bir işlem için kullanılacak şekilde sıfırlamayı CancellationTokenSource dener. |
Şunlara uygulanır
İş Parçacığı Güvenliği
tüm ortak ve korumalı üyeleri CancellationTokenSource iş parçacığı 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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin