Поделиться через


Метод Async.AwaitWaitHandle (F#)

Создает асинхронное вычисление, которое будет ожидать предоставляемый объект WaitHandle.

Пространство имен/путь к модулю: Microsoft.FSharp.Control

Сборка: FSharp.Core (в FSharp.Core.dll)

// Signature:
static member AwaitWaitHandle : WaitHandle * ?int -> Async<bool>

// Usage:
Async.AwaitWaitHandle (waitHandle)
Async.AwaitWaitHandle (waitHandle, millisecondsTimeout = millisecondsTimeout)

Параметры

  • waitHandle
    Тип: WaitHandle

    Дескриптор ожидания, которому можно послать сигнал.

  • millisecondsTimeout
    Тип: int

    Значение времени ожидания в миллисекундах. Если значение времени ожидания не указано, значение по умолчанию — -1, что соответствует System.Threading.Timeout.Infinite.

Возвращаемое значение

Асинхронное вычисление, которое ожидает заданный объект WaitHandle.

Заметки

Вычисление возвращает значение true, если дескриптор обозначил результат в течение заданного времени ожидания.

Пример

В следующем примере кода демонстрируется использование Async.AwaitWaitHandle для задания запуска вычисления при выполнении другой асинхронной операции, как указано в дескрипторе ожидания.

open System.IO

let streamWriter1 = File.CreateText("test1.txt")
let count = 10000000
let buffer = Array.init count (fun index -> byte (index % 256)) 

printfn "Writing to file test1.txt."
let asyncResult = streamWriter1.BaseStream.BeginWrite(buffer, 0, count, null, null)

// Read a file, but use the waitHandle to wait for the write operation
// to be completed before reading.
let readFile filename waitHandle count = 
    async {
        let! returnValue = Async.AwaitWaitHandle(waitHandle)
        printfn "Reading from file test1.txt."
        // Close the file.
        streamWriter1.Close()
        // Now open the same file for reading.
        let streamReader1 = File.OpenText(filename)
        let! newBuffer = streamReader1.BaseStream.AsyncRead(count)
        return newBuffer
    }

let bufferResult = readFile "test1.txt" asyncResult.AsyncWaitHandle count
                   |> Async.RunSynchronously

Output

      

Платформы

Windows 7, Windows Vista с пакетом обновления 2 (SP2), Windows XP с пакетом обновления 3 (SP3), Windows XP x64 с пакетом обновления 2 (SP2), Windows Server 2008 R2, Windows Server 2008 с пакетом обновления 2 (SP2), Windows Server 2003 с пакетом обновления 2 (SP2)

Сведения о версии

Среда выполнения F#

Поддерживается в версиях 2.0, 4.0

Silverlight

Поддерживается в версии 3

См. также

Ссылки

Класс Control.Async (F#)

Пространство имен Microsoft.FSharp.Control (F#)

Журнал изменений

Дата

Журнал

Причина

Август 2010

Добавлен пример кода.

Улучшение информации.