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


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

Создает ограниченный согласованный обработчик отмены для использования в асинхронном рабочем процессе.

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

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

// Signature:
static member OnCancel : (unit -> unit) -> Async<IDisposable>

// Usage:
Async.OnCancel (interruption)

Параметры

  • interruption
    Тип: unit -> unit

    Функция, выполняемая в потоке, в котором осуществляется отмена.

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

Асинхронное вычисление, которое запускает прерывание в случае отмены до удаления.

Заметки

Например, следующий код создает асинхронное вычисление; если во время этого вычисления происходит отмена в области holder, выполняется действие interruption в потоке, где осуществляется отмена. Это может использоваться для организации асинхронного уведомления вычисления об отмене, например посредством установки флага или отмены регистрации ожидающего выполнения действия ввода-вывода.

async { use! holder = Async.OnCancel interruption ... }

Пример

В следующем примере кода показано использование функции Async.OnCancel.

// 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

          

Платформы

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

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

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