gpt4 book ai didi

multithreading - 异步代码 + Async.RunSynchronously 与普通同步代码

转载 作者:行者123 更新时间:2023-12-04 04:30:46 25 4
gpt4 key购买 nike

如果我有这样的代码:

let asyncReadToEnd (stream:Stream) = async {
// Allocate 4kb buffer for downloading data
let buffer = Array.zeroCreate (4 * 1024)
use output = new MemoryStream()
let reading = ref true

while reading.Value do
// Download one (at most) 4kb chunk and copy it
let! count = stream.AsyncRead(buffer, 0, buffer.Length)
output.Write(buffer, 0, count)
reading := count > 0

// Read all data into a string
output.Seek(0L, SeekOrigin.Begin) |> ignore

use sr = new StreamReader(output)
return sr.ReadToEnd()
}

use stream = httpResponse.GetResponseStream()
asyncReadToEnd stream |> Async.RunSynchronously

与简单的做相比,我有什么收获吗

use stream = httpResponse.GetResponseStream()
use sr = new StreamReader(stream)
sr.ReadToEnd()

在这两种情况下,我都会阻塞当前线程,但是使用第一个版本在释放线程资源方面是否还有任何优势?

最佳答案

只要您在每个 async 工作流上使用 Async.RunSynchronously,您就一无所获。您需要编写一个完全异步的程序来利用它。然后你就可以同时做 10,000 个了。

关于multithreading - 异步代码 + Async.RunSynchronously 与普通同步代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19406264/

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