Compartilhar via


Método Async.OnCancel (F#)

Gera um manipulador de cancelamento de escopo, cooperativo para uso dentro de um fluxo de trabalho assíncrono.

Caminho do namespace/módulo: Microsoft.FSharp.Control

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

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

// Usage:
Async.OnCancel (interruption)

Parâmetros

  • interruption
    Tipo: unidade -> unidade

    A função que é executada em um segmento que está realizando o cancelamento.

Valor de retorno

Uma computação assíncrona que dispara a interrupção se ele for cancelado antes de ser descartado.

Comentários

Por exemplo, o código a seguir gera uma computação assíncrona onde, se um cancelamento ocorrer a qualquer momento durante a execução da computação assíncrona no escopo da holder, em seguida, a ação interruption é executado no thread que está executando o cancelamento. Isso pode ser usado para providenciar uma computação assincronamente ser notificado que um cancelamento ocorreu, por exemplo, definir um sinalizador ou cancelando o registro de uma ação de e/S pendente.

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

Exemplo

O exemplo de código a seguir demonstra o 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

Saída

          

Plataformas

O Windows 7, SP2 do Windows Vista, Windows XP SP3, Windows XP Professional x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2

Informações sobre versão

O tempo de execução F#

Compatível com: 2.0, 4.0

Silverlight

Compatível com: 3

Consulte também

Referência

Classe Control.Async (F#)

Microsoft.FSharp.Control Namespace (F#)

Histórico de alterações

Date

History

Motivo

Julho de 2010

Exemplo de código adicionado.

Aprimoramento de informações.