Middle
C#-da vəzifənin (task) icrasını necə ləğv etmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
C#-də bir tapşırığı ləğv etmək üçün CancellationToken və CancellationTokenSource mexanizmi istifadə olunur.
CancellationTokenSourceyaradılır.CancellationTokenSource-danCancellationTokenalınır.CancellationToken, tapşırığı icra edən metoda ötürülür.- İcra olunan metod daxilində, müntəzəm olaraq
IsCancellationRequestedxüsusiyyəti yoxlanılır. - Əgər
IsCancellationRequestedtrueolarsa,OperationCanceledExceptionvə ya başqa bir sonlandırma loqikası yaradılır. - İptal üçün,
CancellationTokenSourceobyektindəCancel()metodu çağırılır.
İstifadə nümunəsi:
using System;
using System.Threading;
using System.Threading.Tasks;
// İptal token mənbəyi yaradılır
CancellationTokenSource cts = new CancellationTokenSource();
CancellationToken token = cts.Token;
// Tapşırıq yaradılır
Task task = Task.Run(() =>
{
try
{
for (int i = 0; i < 100; i++)
{
// İptal istəyi yoxlanılır
if (token.IsCancellationRequested)
{
// OperationCanceledException yaradılır
token.ThrowIfCancellationRequested();
}
// İş simulyasiyası
Console.WriteLine($"İşləyir... {i}");
Thread.Sleep(100);
}
}
catch (OperationCanceledException)
{
// İptal istisnasını idarə et
Console.WriteLine("Tapşırıq ləğv edildi.");
}
catch (Exception ex)
{
// Digər istisnaları idarə et
Console.WriteLine($"Xəta baş verdi: {ex.Message}");
}
}, token); // Token tapşırığa ötürülür
// Bir müddət gözləyin və sonra ləğv etməyi istəyin
Thread.Sleep(500);
Console.WriteLine("Ləğv etməyi istəyirəm...");
cts.Cancel();
// Tapşırığın tamamlanmasını gözləyin
try
{
task.Wait();
}
catch (AggregateException ae)
{
// Xətaları idarə et, OperationCanceledException daxil olmaqla
foreach (var e in ae.InnerExceptions)
{
if (e is OperationCanceledException)
{
Console.WriteLine("Ləğv edilmiş tapşırıq tamamlandı (Wait vasitəsilə)." );
}
else
{
// Digər xətaları idarə et
Console.WriteLine($"Xəta: {e.Message}");
}
}
}
Console.WriteLine("Əsas proqram tamamlandı.");
Alternativlər:
- Xüsusi dəyər və ya bayraq ilə geri dönüş.
- Xaricdən qurulan bayrağı yoxlama,
CancellationTokenistifadə etmədən.
Lakin, CancellationToken standart və tövsiyə olunan yanaşmadır, çünki onun Task Parallel Library (TPL), asinxron əməliyyatlar və OperationCanceledException dəstəyi ilə yaxşı inteqrasiyası var.