gpt4 book ai didi

f# - 在序列表达式中使用 "use"时的资源管理

转载 作者:行者123 更新时间:2023-12-05 01:05:32 25 4
gpt4 key购买 nike

我有一个简单的序列表达式,它使用了我想在完成后清理的资源:

type MyObject() =
member this.Items =
seq {
use resource = ResourcePool.Get()
let c = resource.ValueCount
if c > 0 then
for i in 0 .. c - 1 do
yield resource.GetValue i
}

如果我然后使用序列来迭代,比如说,在项目的中途,资源什么时候被处置?

例如:

// ...

let foo = MyObject
let item = foo.Items |> Seq.find ( fun i -> i.Name = "name" )

// ...

resource在 Seq.find 完成后处理?还是我需要重新考虑我的资源管理策略?

最佳答案

它将在 IEnumerator 时被处理。无论枚举了多少项,都会被释放。对于 Seq 中的函数当函数退出时会发生这种情况(see tryFind 为例)。 GetEnumerator很少在用户代码中直接调用,但当它被调用时应该使用 use而不是 let .

关于f# - 在序列表达式中使用 "use"时的资源管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21341323/

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