2016-05-29 4 views
3

Async.Parallelを使用すると、なぜ1つのプロセッサIDしか持たないのですか?Async.Parallelを使用すると、なぜスレッドIDが1つしかありませんか?

コード:

open System 
open System.Threading 

[for i in 1..10 -> async {return i}] |> Async.Parallel 
            |> Async.RunSynchronously 
            |> Seq.iter (fun i -> printfn "Processor Id: %d Value: %d" Thread.CurrentThread.ManagedThreadId i) 

出力:

Processor Id: 1 Value: 1 
Processor Id: 1 Value: 2 
Processor Id: 1 Value: 3 
Processor Id: 1 Value: 4 
Processor Id: 1 Value: 5 
Processor Id: 1 Value: 6 
Processor Id: 1 Value: 7 
Processor Id: 1 Value: 8 
Processor Id: 1 Value: 9 
Processor Id: 1 Value: 10 
val it : unit =() 

> 
+4

"管理スレッドID"は "プロセッサID"ではありません。 –

+4

私の質問は短くてシンプルでした。なぜポイントが差し引かれたのですか? –

+0

@FyodorSoikin彼はプロセッサIDを測定していません。文字列の名前が間違っています。 – usr

答えて

8

あなたの非同期ワークフローの外に、あなたのメインスレッドからprintfnをやっています。これを試してください:

[for i in 1..10 -> 
    async {return sprintf "Processor Id: %d Value: %d" Thread.CurrentThread.ManagedThreadId i}] 
|> Async.Parallel 
|> Async.RunSynchronously