Compartir a través de


Async.OnCancel (Método de F#)

Genera un controlador de cancelación cooperativa con ámbito para su uso en un flujo de trabajo asincrónico.

Espacio de nombres/Ruta de acceso del módulo: Microsoft.FSharp.Control

Ensamblado: FSharp.Core (en FSharp.Core.dll)

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

// Usage:
Async.OnCancel (interruption)

Parámetros

  • interruption
    Tipo: unit -> unit

    Función que se ejecuta en el subproceso que realiza la cancelación.

Valor devuelto

Cálculo asincrónico que desencadena la interrupción si se cancela antes de que se elimine.

Comentarios

Por ejemplo, el código siguiente genera un cálculo asincrónico en el que, si se produce una cancelación durante la ejecución de dicho cálculo en el ámbito de holder, se ejecutará la acción interruption en el subproceso que realiza la cancelación.Se puede usar para notificar a un cálculo de forma asincrónica que se ha producido una cancelación; por ejemplo, estableciendo una marca o anulando el registro de una acción de E/S pendiente.

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

Ejemplo

En el ejemplo de código siguiente, se muestra el uso 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

Output

  
  
  
  

Plataformas

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

Información de versiones

Versiones de la biblioteca básica de F#

Se admite en: 2.0, 4.0, portables

Vea también

Referencia

Control.Async (Clase de F#)

Microsoft.FSharp.Control (Espacio de nombres de F#)