Skip to content

FR CSharp Cancellation

Bad Newbie edited this page Oct 16, 2026 · 3 revisions

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Scripts d'annulation, de pause et d'arrière-plan

Manuel C# · Exemples UO

CancellationTokenSource crée une demande d'annulation, CancellationToken est transmis à l'opération. L'annulation est coopérative : l'opération vérifie le token ou le transmet. Le script intégré obtient Cancellation ; WaitAsync est utilisé pour attendre.

Exemple simple (Example.csx)

Enregistrez cet exemple séparément dans Example.csx. Exécutez-le indépendamment des autres exemples de cette page.

Example.csx:

Cancellation.ThrowIfCancellationRequested();
await WaitAsync(10);
UO.Print("Done");

L’annulation est coopérative : le contrôle du jeton et WaitAsync répondent à Stop ; du code tiers sans prise en charge de l’annulation peut continuer.

Résultat:

Done
for (int i = 0; i < 3; i++)
{
    Cancellation.ThrowIfCancellationRequested();
    await WaitAsync(100);
    UO.Print($"Tick {i}");
}
{
    using var timeout = new CancellationTokenSource(TimeSpan.FromSeconds(1));
    using var linked = CancellationTokenSource.CreateLinkedTokenSource(Cancellation, timeout.Token);
    try
    {
        await Task.Delay(10, linked.Token);
        UO.Print("Operation completed");
    }
    catch (OperationCanceledException) when (timeout.IsCancellationRequested)
    {
        UO.Print("Local timeout");
    }
}

Ne remplacez pas l'arrêt du script par une interception infinie OperationCanceledException. Un appel de blocage arbitraire vers une bibliothèque tierce ne devient pas interruptible du seul fait de la présence d'un jeton. La pause et la demande d'annulation ont des objectifs différents : la pause préserve la continuation, l'annulation termine l'exécution.

Documentation officielle : Scripts d'annulation, de pause et d'arrière-plan - Microsoft Learn.

La demande d'annulation est coopérative. Task.Delay sans transfert Cancellation, l'attente d'une tâche tierce et d'un appel de bibliothèque sans prise en charge d'annulation peut continuer après avoir appuyé sur Stop. Une fois qu'une demande d'annulation est faite, les autres activités de jeu de cette exécution sont interdites ; cela n'oblige aucun code .NET à se terminer immédiatement.

Clone this wiki locally