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()
}
но в целом параллельные задачи будут запускаться в пуле потоков.