使用TPL的代码是否还有F#惯用的方式?

时间:2018-08-20 16:11:38

标签: f# apache-kafka

我正在将以下C#代码转换为F#。 (https://github.com/confluentinc/confluent-kafka-dotnet/blob/master/examples/AvroGeneric/Program.cs

var consumeTask = Task.Factory.StartNew(() =>
{
    while (true)
    {
        consumer.Poll(100);
    }
});

consumeTask.Wait();

是否应将其替换为Async工作流程?顺便说一句,这是不使用Poll的一种方法吗?

1 个答案:

答案 0 :(得分:2)

有关一般使用Kafka的更为F#惯用的方式,请查看Jet.com的Kafunk库。它有一个很好的F#API,用于包装Confluent .NET Kafka库,以我的经验,它也相当出色。

对于TPL任务,您可以使用与F#异步工作流大致相同的方式:

let poller = 
    async {
        while true do
            consumer.Poll 100
    }

poller |> Async.Start

如果要在异步工作流中使用Task,则可以使用Async.AwaitTak,也可以使用自定义工作流将它们融合在一起,例如this one