STATHREAD как асинхронный рабочий процесс в F#

Рассмотрим следующий фрагмент кода:

let t1 = async { return process1() }
let t2 = async { return process2() }
let t3 = async { return windowsProcess() }

let execute =
    [ t1; t2; t3 ]
    |> Async.Parallel
    |> Async.RunSynchronously
    |> ignore

Что делать, если для WindowsProcess требуется STATHREAD? Возможно ли это с этой конструкцией?


person Community    schedule 12.07.2009    source источник


Ответы (1)


Если есть конкретный поток с SyncrhonizationContext, например. поток пользовательского интерфейса, тогда вы можете сделать, например.

// earlier on the UI thread...
let syncCtxt = System.Threading.SynchronizationContext.Current 

// then define t3 as
let t3 = async { 
    do! Async.SwitchToGuiThread(syncCtxt)
    // now we're running on the UI thread until the next async 'bind' point
    return windowsProcess() 
    }

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

person Brian    schedule 12.07.2009