gpt4 book ai didi

f# - 如何在 F# 中使用 BlockingCollection<'a>.TryTake

转载 作者:行者123 更新时间:2023-12-01 02:51:18 37 4
gpt4 key购买 nike

如何在 BlockingCollection<'a> 上使用 TryTake 方法以毫秒为单位传递超时时间?

这是签名:

BlockingCollection.TryTake(item: byref, millisecondsTimeout: int) : bool

是否可以使用 Tuple 方法来避免像 Dictionary.TryGet 方法那样传递 ref 类型?

IE。
让成功, item = myDictionary.TryGetValue(client)

我正在努力解决这个特殊的签名,任何建议都会很棒。

干杯!

最佳答案

我相信您只能将这种技术用于 byref出现在参数列表末尾的参数(这类似于可选参数的规则)。所以如果 BlockingCollection.TryTake用签名 int * 'T byref -> bool 定义它会工作,但因为它被定义为 'T byref * int -> bool它不会。

例如:

open System.Runtime.InteropServices

type T =
static member Meth1(a:int, [<Out>]b:string byref, [<Out>]c:bool byref) : char =
b <- sprintf "%i" a
c <- a % 2 = 0
char a
static member Meth2([<Out>]b:string byref, [<Out>]c:bool byref, a:int) : char =
b <- sprintf "%i" a
c <- a % 2 = 0
char a

// ok
let (r,b,c) = T.Meth1(5)
// ok
let (r,c) = T.Meth1(5,ref "test")
// ok
let r = T.Meth1(5, ref "test", ref true)
// doesn't compile
let (r,b,c) = T.Meth2(5)
// doesn't compile
let (r,c) = T.Meth2(ref "test", 5)
// ok
let r = T.Meth2(ref "test", ref true, 5)

关于f# - 如何在 F# 中使用 BlockingCollection<'a>.TryTake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4927649/

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