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
我正在查看一些像这样的遗留 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 unloadedAppDomain
. 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