Tasks.Task.Run:从 C# 到 F# 的端口

Jam*_*xon 2 f#

我正在查看一些像这样的遗留 C# 代码:

    await Task.Run(() =>
    {
        _logger.LogException(LogLevel.Error, message, exception);
        Thread.Sleep(500);
    });
Run Code Online (Sandbox Code Playgroud)

我创建了以下 F# 代码,但 Thread.Sleep 没有受到影响:

    Tasks.Task.Run(fun _ -> logger.Log(LogLevel.Warn, message)
                            Thread.Sleep(500))
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我我做错了什么吗?我需要维护方法的签名。

提前致谢。

Chr*_*son 5

这通常是您使用异步工作流的地方。如果你需要让函数返回一个任务,你可以这样做:

let someFunc (message : string) : Task =
    async {
        logger.Log(LogLevel.Warn, message)
        Thread.Sleep(500)
    } |> Async.StartAsTask :> Task
Run Code Online (Sandbox Code Playgroud)