在我的 f# 项目中,我调用一个 C# 库,该库返回一个任务。当我尝试在我的 f# 项目中执行此操作时,没有任何反应。
let str = getName() |> Async.AwaitTask |> Async.RunSynchronously
但是,如果我更新代码以使用异步工作流程,它就不会再挂起。调用 Async.RunSynchronously 时我做错了什么?
async {
let! str = getName() |> Async.AwaitTask
//Do something with str
}
在你的第二个例子中你只是build async
工作流程,但是don't实际上run it.
它的设计方式是这样的,因此您可以定义一个复杂的工作流程,而无需立即运行其中的每个异步部分,而是在一切准备就绪时运行整个工作流程。
为了运行它,你需要调用Async.RunSynchronously
or Async.StartAsTask
:
async {
let! str = getName() |> Async.AwaitTask
//Do something with str
} |> Async.RunSynchronously
另外,如果你do需要与Task
s,使用可能更好任务生成器.fs https://www.nuget.org/packages/TaskBuilder.fs/代替Async
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)