Junior — Middle
Milyen módszerekkel lehet törölni egy feladat végrehajtását a rendszerben?
sobes.tech MI
Válasz az MI-től
C#-ban általában a CancellationToken mechanizmust használják egy feladat (Task) végrehajtásának megszakítására. A fő megszakítási módszerek:
- CancellationTokenSource — létrehoz egy megszakítási tokent.
- A CancellationToken átadása egy feladatnak vagy aszinkron módszernek.
- A feladat belsejében rendszeresen ellenőrizni a
token.IsCancellationRequestedtulajdonságot vagy meghívni atoken.ThrowIfCancellationRequested()-et. - A
CancellationTokenSource.Cancel()meghívásával kérjük a megszakítást.
Példa:
var cts = new CancellationTokenSource();
var token = cts.Token;
var task = Task.Run(() => {
for (int i = 0; i < 100; i++) {
token.ThrowIfCancellationRequested();
// munka
Thread.Sleep(100);
}
}, token);
// Feladat megszakítása
cts.Cancel();
try {
task.Wait();
} catch (AggregateException ex) {
if (ex.InnerExceptions.Any(e => e is OperationCanceledException)) {
Console.WriteLine("A feladat megszakadt");
}
}
Így a megszakítás egy kooperatív folyamat, ahol a feladatnak magának kell fenntartania a megszakítási token ellenőrzését.