1
我從http4s複製一個例子:在scalaz-stream中,如何在接收器終止時運行任務?
// Print received Text frames, and, on completion, notify the console
val sink: Sink[Task, WebSocketFrame] = Process.constant {
case Text(t) => Task.delay(println(t))
case f => Task.delay(println(s"Unknown type: $f"))
}.onComplete(Process.eval[Task, Nothing](Task{println("Terminated!")}).drain)
這將產生一個編譯錯誤:「終止」「類型單位的表達不符合預期的類型_A」
我只是想打印線
... .onComplete(Process.eval(Task{println("Terminated!")}).drain)
這裏的問題是,你的Process.eval
調用構造一個Process[Task, Unit]
而不是Process[Task, Nothing]
,你通過給問:當宿被終止
或者你甚至可以用'的onComplete(EVAL _(/ *你的任務* /))'。注意使用'eval_'而不是'eval' –
謝謝你的回覆,但是這給我留下了'''表達式類型Process [Any,Nothin]不符合預期的類型stream.Sink [Task,WebsocketBits。 WebSocketFrame]''' – Atle
@Atle試圖將你的接收器分解成兩個'val's,並且可能向它們添加類型註釋。你傳遞給'onComplete'的過程應該是'Process [Task,Nothing]'類型。 –