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

Tasks.Task.Run: port from C# to F#

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

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

我创建了以下 F# 代码,但 Thread.Sleep 没有被命中:

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

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

提前致谢。

看起来它正在工作,我只是遇到一个异常:

System.AppDomainUnloadedException: Attempted to access an unloaded AppDomain. This can happen if the test(s) started a thread but did not stop it. Make sure that all the threads started by the test(s) are stopped before completion.

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

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