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
    |> игнорировать

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

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() 
    }

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

Другие вопросы по тегам