Возможна передача Printf.TextWriterFormat в MailBoxProcessor?

Я создаю параллельный модульный тестовый бегун с помощью 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 ответов


ваш вопрос не совсем ясен, но вы можете достичь своей цели через kprintf:

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