Aracılığıyla paylaş


Async.Catch<'T> Yöntemi (F#)

Belirtilen hesaplaması yürütülür bir zaman uyumsuz hesaplaması oluşturur. Bu hesaplama başarılı bir şekilde tamamlandıktan sonra bu yöntem döndürür Choice1Of2 döndürülen değere sahip. Bu hesaplama bitmeden önce özel bir durum harekete geçirirse Choice2Of2 özel durumu ile dönün.

Ad alanı/modül yolu: Microsoft.FSharp.Control

Derleme: FSharp.Core (FSharp.Core.dll),

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

// Usage:
Async.Catch (computation)

Parametreler

  • computation
    Türü: zaman uyumsuz<'T>

    Türü döndürür giriş hesaplaması ' t.

Dönüş Değeri

Sayı hesaplaması bir seçim , = veya bir özel durum yazın.

Örnek

Aşağıdaki kod örneği nasıl kullanılacağını gösteren Async.Catch bir özel durum yaratabilir zaman uyumsuz bir hesaplaması çalıştırmak için.

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)

Platformlar

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

Sürüm Bilgisi

F# Çekirdek Kitaplığı sürümleri

Desteklenen: 2.0, 4.0, Portable

Ayrıca bkz.

Başvuru

Control.Async Sınıfı (F#)

Microsoft.FSharp.Control İsim Uzayı (F#)