使用Async.Parallel时,为什么我只有一个线程ID?

Sco*_*rod 3 f# multithreading asynchronous

使用Async.Parallel时,为什么我只有一个处理器ID?

码:

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)
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)
val it : unit = ()

> 
Run Code Online (Sandbox Code Playgroud)

scr*_*wtp 8

您在printfn异步工作流程之外的主线程中执行此操作.试试这个:

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