gpt4 book ai didi

.net - 无限函数并行

转载 作者:行者123 更新时间:2023-12-02 04:35:39 26 4
gpt4 key购买 nike

我有一个按以下方式执行的函数:

while true
[do something]
[sleep]

现在我想启动多个执行相同逻辑的线程。

我尝试将我的函数包装在 async {} 中,并在 Async.ParallelAsync.RunSynchronously 中传递结果,但我只得到列表中的第一个函数。

我试图将我的问题归结为以下示例:

[1..100]
|> Seq.map (fun x ->
async {
Thread.Sleep(1000)
printfn "%i" x
Thread.Sleep(TimeSpan.FromHours(1.))})
|> Async.Parallel
|> Async.Ignore
|> Async.RunSynchronously

我想在 1 秒后打印所有数字,然后等待 1 小时让所有线程完成。但这需要更长的时间,我在几分钟内就一个一个地打印出数字。

一种解决方案是将我的收藏通过管道传输到

|> Array.map (fun x -> Task.Factory.StartNew(fun () -> domystuff x))
|> Task.WaitAll

这是实现这一目标的正确方法吗?我当然可以使用 Thread.Start,但我想要更多 F#-ish。

最佳答案

我能够使用 Async.Sleep 获得您想要的结果而不是 Thread.Sleep:

[1..100]
|> Seq.map (fun x ->
async {
do! Async.Sleep(1000)
printfn "%i" x
do! Async.Sleep(int (TimeSpan.FromHours(1.).TotalMilliseconds))})
|> Async.Parallel
|> Async.Ignore
|> Async.RunSynchronously

关于.net - 无限函数并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22021764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com