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


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

Создает асинхронное вычисление, которое будет ожидать IAsyncResult.

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

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

// Signature:
static member AwaitIAsyncResult : IAsyncResult * ?int -> Async<bool>

// Usage:
Async.AwaitIAsyncResult (iar)
Async.AwaitIAsyncResult (iar, millisecondsTimeout = millisecondsTimeout)

Параметры

  • iar
    Тип: IAsyncResult

    Объект IAsyncResult, сигнализация которого ожидается.

  • millisecondsTimeout
    Тип: int

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

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

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

Заметки

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

Пример

В следующем примере кода демонстрируется использование Async.AwaitIAsyncResult для задания и выполнения вычисление, которое срабатывает, когда предыдущая асинхронная операция .NET Framework, которая производит IAsyncResult, заканчивается. В этом случае вызов AwaitIAsyncResult принуждает операцию дождаться завершения операции записи в файл, прежде чем открыть файл для чтения.

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 AwaitIAsyncResult to wait for the write operation
// to be completed before reading.
let readFile filename asyncResult count = 
    async {
        let! returnValue = Async.AwaitIAsyncResult(asyncResult)
        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 count
                   |> Async.RunSynchronously

Платформы

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#)

IAsyncResult

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

Дата

Журнал

Причина

Август 2010

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

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