Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 如何在F中等待异步方法_F#_Async Await - Fatal编程技术网

F# 如何在F中等待异步方法

F# 如何在F中等待异步方法,f#,async-await,F#,Async Await,如何在F中等待异步方法 我有以下代码: 错误: 成员定义中存在意外的绑定器关键字 注意,我回顾了以下内容: 但是,我只观察函数技术,而不观察OOP技术。您会得到错误,因为!像这样构造!需要放在一个计算工作流中,比如async{…},但是还有其他的-它基本上是F为单子提供的语法糖-在C中它将是来自。。。选择LINQ带来的东西,在Haskell里会是这样的。。。块 因此,假设brick.ConnectAsync确实会返回一些Async,那么您可以使用Async.runsynchronous等待它,如

如何在F中等待异步方法

我有以下代码:

错误:

成员定义中存在意外的绑定器关键字

注意,我回顾了以下内容:


但是,我只观察函数技术,而不观察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操作成功。现在我只需要弄清楚为什么我的马达和声音的执行没有被观察到。