可以将Printf.TextWriterFormat传递给MailBoxProcessor吗?

时间:2016-02-19 21:07:02

标签: f#

我正在使用MailBoxProcessor构建并行单元测试运行器。

我需要为测试排队打印语句,所以我可以在测试完成后打印它们。我知道如何发送一个字符串并建立一个列表,以便我可以打印它们,但这迫使我使用sprintf并将其传输到我的打印功能中,并不像我想的那样干净。

[1..200]
|> List.iter (fun i ->
  sprintf "Test %i" i &&& fun ctx ->
    ctx.printfn <| sprintf "A guid %A" (ng())
    ctx.printfn <| sprintf "I am test %i" i
    ctx.printfn <| sprintf "A guid %A" (ng()))

您可以在此处查看完整代码: https://github.com/lefthandedgoat/prunner/blob/master/Program.fs#L36-L41

并且看到ctx是一个带有printfn方法的对象,它接受一个字符串并将其发布到一个邮箱,该邮箱将消息排队直到测试完成,然后循环遍历它们并打印它们。

我的目标是让ctx.printfn看起来像这样

[1..200]
|> List.iter (fun i ->
  sprintf "Test %i" i &&& fun ctx ->
    ctx.printfn "A guid %A" (ng())
    ctx.printfn "I am test %i" i
    ctx.printfn "A guid %A" (ng()))

1 个答案:

答案 0 :(得分:7)

您的问题并不完全清楚,但您可以通过kprintf实现目标:

member x.printfn fmtStr = 
    Printf.kprintf (fun msg -> reporter.Post(Print(msg, x.TestId))) fmtStr