Async.OnCancel-Methode (F#)
Generiert einen bereichsbezogenen kooperativen Abbruchhandler zur Verwendung in einem asynchronen Workflow.
Namespace/Modulpfad: Microsoft.FSharp.Control
Assembly: FSharp.Core (in FSharp.Core.dll)
// Signature:
static member OnCancel : (unit -> unit) -> Async<IDisposable>
// Usage:
Async.OnCancel (interruption)
Parameter
interruption
Typ: unit -> unitDie Funktion, die in dem Thread ausgeführt wird, der den Abbruch ausführt.
Rückgabewert
Eine asynchrone Berechnung, die die Unterbrechung auslöst, wenn der Abbruch vor der Freigabe erfolgt.
Hinweise
Beispiel: Folgender Code erstellt eine asynchrone Berechnung, und wenn während ihrer Ausführung im Gültigkeitsbereich von holder ein Abbruch erfolgt, wird die Aktion interruption für den Thread ausgeführt, der den Abbruch ausführt.Damit kann eine Berechnung so vorbereitet werden, dass sie asynchron benachrichtigt wird, dass ein Abbruch erfolgt ist, z. B. durch Festlegen eines Flags oder Aufheben der Registrierung einer ausstehenden E/A-Aktion.
async { use! holder = Async.OnCancel interruption ... }
Beispiel
Im folgenden Codebeispiel wird die Verwendung von Async.OnCancel veranschaulicht.
// 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
Plattformen
Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2
Versionsinformationen
F#-Kern-Bibliotheks-Versionen
Unterstützt in: 2,0, 4,0, portablen