CancellationTokenSource.Cancel Yöntem
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.
İptal isteği iletir.
Aşırı Yüklemeler
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. |
Cancel()
İptal isteği iletir.
public:
void Cancel();
public void Cancel ();
member this.Cancel : unit -> unit
Public Sub Cancel ()
Özel durumlar
Bu CancellationTokenSource atılmış.
İlişkili CancellationTokenüzerindeki kayıtlı geri çağırmalar tarafından atılan tüm özel durumları içeren toplam özel durum.
Ö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 yapılmamış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
İlişkiliye CancellationToken iptal bildirimi gönderilir ve true değerini döndüren IsCancellationRequested bir duruma geçiş yapılır.
ile CancellationToken kaydedilen geri çağırmalar veya iptal edilebilir işlemler yürütülür.
ile kaydedilen CancellationToken iptal edilebilir işlemlerin ve geri çağırmaların özel durumlar oluşturmaması önerilir.
İptal'in bu aşırı yüklemesi, bir AggregateExceptioniçine atılan özel durumları bir araya toplar, böylece bir geri çağırma özel durum oluşturur ve diğer kayıtlı geri çağırmaların yürütülmesini engellemez.
Bu yöntemin çağrılması, çağrısıyla Cancel(false)
aynı etkiye sahiptir.
Ayrıca bkz.
Şunlara uygulanır
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.
public:
void Cancel(bool throwOnFirstException);
public void Cancel (bool throwOnFirstException);
member this.Cancel : bool -> unit
Public Sub Cancel (throwOnFirstException As Boolean)
Parametreler
- throwOnFirstException
- Boolean
true
özel durumların hemen yayılması gerekiyorsa; aksi takdirde , false
.
Özel durumlar
Bu CancellationTokenSource atılmış.
İlişkili CancellationTokenüzerindeki kayıtlı geri çağırmalar tarafından atılan tüm özel durumları içeren toplam özel durum.
Açıklamalar
İlişkiliye CancellationToken iptal bildirimi gönderilir ve döndürdüğü IsCancellationRequested true
bir duruma geçiş yapılır.
ile CancellationToken kaydedilen geri çağırmalar veya iptal edilebilir işlemler yürütülür. Geri çağırmalar LIFO sırasına göre zaman uyumlu olarak yürütülür.
ile kaydedilen CancellationToken iptal edilebilir işlemlerin ve geri çağırmaların özel durumlar oluşturmaması önerilir.
ise throwOnFirstException
true
, bir özel durum çağrısının Canceldışına hemen yayılır ve kalan geri çağırmaların ve iptal edilebilir işlemlerin işlenmesini engeller.
ise throwOnFirstException
false
, bu aşırı yükleme içine AggregateExceptionoluşturulan tüm özel durumları toplar; böyle bir özel durum oluşturan bir geri çağırma diğer kayıtlı geri çağırmaların yürütülmesini engellemez.