F# 如何在F中等待异步方法
如何在F中等待异步方法 我有以下代码: 错误: 成员定义中存在意外的绑定器关键字 注意,我回顾了以下内容:F# 如何在F中等待异步方法,f#,async-await,F#,Async Await,如何在F中等待异步方法 我有以下代码: 错误: 成员定义中存在意外的绑定器关键字 注意,我回顾了以下内容: 但是,我只观察函数技术,而不观察OOP技术。您会得到错误,因为!像这样构造!需要放在一个计算工作流中,比如async{…},但是还有其他的-它基本上是F为单子提供的语法糖-在C中它将是来自。。。选择LINQ带来的东西,在Haskell里会是这样的。。。块 因此,假设brick.ConnectAsync确实会返回一些Async,那么您可以使用Async.runsynchronous等待它,如
但是,我只观察函数技术,而不观察OOP技术。您会得到错误,因为!像这样构造!需要放在一个计算工作流中,比如async{…},但是还有其他的-它基本上是F为单子提供的语法糖-在C中它将是来自。。。选择LINQ带来的东西,在Haskell里会是这样的。。。块 因此,假设brick.ConnectAsync确实会返回一些Async,那么您可以使用Async.runsynchronous等待它,如下所示:
let brick = Brick(BluetoothCommunication("COM3"))
let result = brick.ConnectAsync() |> RunSynchronously
let myAsyncComputation =
async {
let brick = Brick(BluetoothCommunication "COM3")
let! result = brick.ConnectAsync()
// do something with result ...
}
遗憾的是,在您链接的页面上进行快速浏览器搜索时,没有找到ConnectAsync,因此我无法确切地告诉您代码段的缩进是什么,但很可能您希望在async{…}块中有这样的缩进:
let brick = Brick(BluetoothCommunication("COM3"))
let result = brick.ConnectAsync() |> RunSynchronously
let myAsyncComputation =
async {
let brick = Brick(BluetoothCommunication "COM3")
let! result = brick.ConnectAsync()
// do something with result ...
}
请注意,我删除了一些不必要的括号等
然后你可以使用这个MyAsyncComputing
在另一个异步{..}工作流中
使用Async.RunSynchronous运行并等待它
使用Async.Start在后台运行时,您的块需要使用Async类型
使用Async.startask启动并从中获取任务
...
顺便说一句:我不明白的是最后一部分-你是在说LegoExample课程吗?是的。我正试图使用F的OOP支持来实现这一点。嗨,卡斯滕,我必须创建一个单独的函数MyAsyncComputing吗?我希望在我的LegoExample类型中完成此操作。但是异步{}当我将其嵌入LegoExample类型时引发生成错误。它不一定是函数,但如果您想在构造函数中调用它,那么在第一个成员出现在类构造函数中之前使用let和do编写的几乎所有内容都将出现在类构造函数中`那么您可能希望使用我给您的第一件事,忽略异步方面-如果您你可以把异步看作是一个任务,而异步{…}的东西是你用异步做的,用C语言等待更好的东西:PThanks Carsten。生成错误已解决。ConnectAsync操作成功。现在我只需要弄清楚为什么我的马达和声音的执行没有被观察到。