2009-07-12 5 views
2

das folgende Codefragment vor:STAThread als Asynchron-Workflow in 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 

Was die windowsProcess eine STAThread erfordert in dem Fall zu tun? Ist das mit dieser Konstruktion möglich?

Antwort

5

Wenn es einen bestimmten Thread mit einem SyncronizationContext gibt, z. der UI-Thread, dann könnten Sie z.B.

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

aber im Allgemeinen werden parallele Tasks im Threadpool gestartet.