Udostępnij za pośrednictwem


Async.Catch<'T> — Metoda (F#)

Tworzy asynchronicznego obliczeń, wykonujący określonego obliczeń.Jeśli obliczenia zakończy się pomyślnie, a następnie zwraca tę metodę Choice1Of2 z wartością zwróconą.Jeśli obliczenia wzbudza wyjątek, przed zakończeniem następnie return Choice2Of2 z wyjątkiem wypukły.

Ścieżka obszaru nazw/modułu: Microsoft.FSharp.Control

Zestaw: FSharp.Core (w FSharp.Core.dll)

// Signature:
static member Catch : Async<'T> -> Async<Choice<'T,exn>>

// Usage:
Async.Catch (computation)

Parametry

  • computation
    Typ: asynchroniczne<'T>

    Wejściowy obliczeń, która zwraca typ "T.

Wartość zwracana

Obliczeń, która zwraca Wybór z typu T1 lub wyjątek.

Przykład

Poniższy przykład kodu pokazuje, jak używać Async.Catch uruchomić asynchronicznego obliczeń, która może zgłosić wyjątek.

open System
open System.IO

let writeToFile filename numBytes = 
    async {
        use file = File.Create(filename)
        printfn "Writing to file %s." filename
        do! file.AsyncWrite(Array.zeroCreate<byte> numBytes)
    }

let readFile filename numBytes =
    async {
        use file = File.OpenRead(filename)
        printfn "Reading from file %s." filename
        do! file.AsyncRead(numBytes) |> Async.Ignore
    }

let filename = "BigFile.dat" 
let numBytes = 100000000

let result1 = writeToFile filename numBytes
             |> Async.Catch
             |> Async.RunSynchronously
match result1 with
| Choice1Of2 _ -> printfn "Successfully wrote to file."; ()
| Choice2Of2 exn -> 
      printfn "Exception occurred writing to file %s: %s" filename exn.Message

// Start these next two operations asynchronously, forcing an exception due 
// to trying to access the file twice simultaneously.
Async.Start(readFile filename numBytes)
let result2 = writeToFile filename numBytes
             |> Async.Catch
             |> Async.RunSynchronously
match result2 with
| Choice1Of2 buffer -> printfn "Successfully read from file."
| Choice2Of2 exn ->
    printfn "Exception occurred reading from file %s: %s" filename (exn.Message)

Platformy

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

Informacje o wersji

F# Core wersji biblioteki

Obsługiwane: 2.0, 4.0, przenośne

Zobacz też

Informacje

Control.Async — Klasa (F#)

Microsoft.FSharp.Control — Przestrzeń nazw (F#)