Partager via


Async.OnCancel, méthode (F#)

Génère un gestionnaire d'annulation coopérative dont la portée est limitée au sein d'un flux de travail asynchrone.

Espace de noms/Chemin du module : Microsoft.FSharp.Control

Assembly : FSharp.Core (in FSharp.Core.dll)

// Signature:
static member OnCancel : (unit -> unit) -> Async<IDisposable>

// Usage:
Async.OnCancel (interruption)

Paramètres

  • interruption
    Type : unit -> unit

    Fonction exécutée sur le thread qui exécute l'annulation.

Valeur de retour

Calcul asynchrone qui déclenche l'interruption s'il est annulé avant d'être supprimé.

Notes

Par exemple, le code suivant génère un calcul asynchrone pour lequel, si une annulation survient à tout moment pendant l'exécution du calcul asynchrone dans la portée de holder, puis l'interruption d'action est exécutée sur le thread qui exécute l'annulation. Cela peut être utilisé pour faire en sorte qu'un calcul soit notifié de manière asynchrone de la survenue d'une annulation, par exemple, en définissant un indicateur ou en désenregistrant une action E/S en attente.

async { use! holder = Async.OnCancel interruption ... }

Exemple

L'exemple de code suivant illustre l'utilisation de Async.OnCancel.

// This is a simulated cancellable computation. It checks the token source 
// to see whether the cancel signal was received. 
let computation (tokenSource:System.Threading.CancellationTokenSource) =
    async {
        use! cancelHandler = Async.OnCancel(fun () -> printfn "Canceling operation.")
        // Async.Sleep checks for cancellation at the end of the sleep interval, 
        // so loop over many short sleep intervals instead of sleeping 
        // for a long time. 
        while true do 
            do! Async.Sleep(100)
    }

let tokenSource1 = new System.Threading.CancellationTokenSource()
let tokenSource2 = new System.Threading.CancellationTokenSource()

Async.Start(computation tokenSource1, tokenSource1.Token)
Async.Start(computation tokenSource2, tokenSource2.Token)
printfn "Started computations."
System.Threading.Thread.Sleep(1000)
printfn "Sending cancellation signal."
tokenSource1.Cancel()
tokenSource2.Cancel()

// Wait for user input to prevent application termination.
System.Console.ReadLine() |> ignore

Sortie

  
  
  
  

Plateformes

Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2

Informations de version

Versions de bibliothèque principale F#

Prise en charge dans : 2,0, 4,0, portables

Voir aussi

Référence

Control.Async, classe (F#)

Microsoft.FSharp.Control, espace de noms (F#)