Async.OnCancel Method (F#)
Generates a scoped, cooperative cancellation handler for use within an asynchronous workflow.
Namespace/Module Path: Microsoft.FSharp.Control
Assembly: FSharp.Core (in FSharp.Core.dll)
// Signature:
static member OnCancel : (unit -> unit) -> Async<IDisposable>
// Usage:
Async.OnCancel (interruption)
Parameters
interruption
Type: unit -> unitThe function that is executed on the thread performing the cancellation.
Return Value
An asynchronous computation that triggers the interruption if it is cancelled before being disposed.
Remarks
For example, the following code generates an asynchronous computation where, if a cancellation happens any time during the execution of the asynchronous computation in the scope of holder, then action interruption is executed on the thread that is performing the cancellation. This can be used to arrange for a computation to be asynchronously notified that a cancellation has occurred, for example, by setting a flag, or deregistering a pending I/O action.
async { use! holder = Async.OnCancel interruption ... }
Example
The following code example demonstrates the use of 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
Started computations. Sending cancellation signal. Canceling operation. Canceling operation.
Platforms
Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2
Version Information
F# Core Library Versions
Supported in: 2.0, 4.0, Portable