2009-07-12 5 views
2

Рассмотрим следующий фрагмент кода: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? Возможно ли это с этой конструкцией?

ответ

5

Если есть конкретный поток с 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() 
    } 

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