Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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#_Lego_Mindstorms - Fatal编程技术网

F# 为什么强制转换值声明而不是函数参数会导致不同的行为?

F# 为什么强制转换值声明而不是函数参数会导致不同的行为?,f#,lego,mindstorms,F#,Lego,Mindstorms,为什么强制转换值声明而不是函数参数会导致不同的行为 以下操作挂起: let duration = uint32 500 ... brick.DirectCommand.TurnMotorAtPowerForTimeAsync(motors, power, duration, breakEnabled) |> ignore brick.DirectCommand.TurnMotorAtPowerForTimeAsync(motors, power, uint32 500, breakEna

为什么强制转换值声明而不是函数参数会导致不同的行为

以下操作挂起:

let duration = uint32 500
...
brick.DirectCommand.TurnMotorAtPowerForTimeAsync(motors, power, duration, breakEnabled) |> ignore
brick.DirectCommand.TurnMotorAtPowerForTimeAsync(motors, power, uint32 500, breakEnabled) |> ignore
let volume = 100
let frequency = uint16 1000
let duration = uint32 500
let power = 100
let motors = OutputPort.B ||| OutputPort.C
let breakEnabled = false

let moveAsync = async {

    let brick = Brick(UsbCommunication())

    brick.ConnectAsync() |> ignore
    brick.DirectCommand.TurnMotorAtPowerForTimeAsync(motors, power, duration, breakEnabled) |> ignore

    }

Async.RunSynchronously moveAsync
以下操作成功:

let duration = uint32 500
...
brick.DirectCommand.TurnMotorAtPowerForTimeAsync(motors, power, duration, breakEnabled) |> ignore
brick.DirectCommand.TurnMotorAtPowerForTimeAsync(motors, power, uint32 500, breakEnabled) |> ignore
let volume = 100
let frequency = uint16 1000
let duration = uint32 500
let power = 100
let motors = OutputPort.B ||| OutputPort.C
let breakEnabled = false

let moveAsync = async {

    let brick = Brick(UsbCommunication())

    brick.ConnectAsync() |> ignore
    brick.DirectCommand.TurnMotorAtPowerForTimeAsync(motors, power, duration, breakEnabled) |> ignore

    }

Async.RunSynchronously moveAsync
有什么区别

代码:

let duration = uint32 500
...
brick.DirectCommand.TurnMotorAtPowerForTimeAsync(motors, power, duration, breakEnabled) |> ignore
brick.DirectCommand.TurnMotorAtPowerForTimeAsync(motors, power, uint32 500, breakEnabled) |> ignore
let volume = 100
let frequency = uint16 1000
let duration = uint32 500
let power = 100
let motors = OutputPort.B ||| OutputPort.C
let breakEnabled = false

let moveAsync = async {

    let brick = Brick(UsbCommunication())

    brick.ConnectAsync() |> ignore
    brick.DirectCommand.TurnMotorAtPowerForTimeAsync(motors, power, duration, breakEnabled) |> ignore

    }

Async.RunSynchronously moveAsync

您正在做的事情很奇怪,您应该了解如何使用
async
工作流。也就是说,我所期望的-如果您的函数确实返回
Async
,并且不关心返回值,那么您也可以使用
Async.Ignore
将其转换为
Async
(而不是普通的
Ignore

编辑:澄清我给出此答案的原因-我甚至无法想象您会面临上述问题的情景

但是你发布的代码显然存在一些问题,在我看来,无法真正解释正在发生的事情。类似于在异步工作流中返回任务(可能已启动或未启动),而不等待任务完成。如果这段代码符合您的期望,我觉得这只是巧合


我的直觉是,一旦你解决了这些问题,你就会发现无论你在持续时间参数中采用哪种方式都是好的。

你所做的很奇怪,你应该学习如何使用
async
工作流。也就是说,我所期望的-如果您的函数确实返回
Async
,并且不关心返回值,那么您也可以使用
Async.Ignore
将其转换为
Async
(而不是普通的
Ignore

编辑:澄清我给出此答案的原因-我甚至无法想象您会面临上述问题的情景

但是你发布的代码显然存在一些问题,在我看来,无法真正解释正在发生的事情。类似于在异步工作流中返回任务(可能已启动或未启动),而不等待任务完成。如果这段代码符合您的期望,我觉得这只是巧合


我的直觉是,一旦你解决了这些问题,你就会发现无论你在持续时间争论中采用哪种方式都是好的。

我知道,当你提出新问题时,这是新的一天。你打算在x天内每天问一个肯定的问题来获得徽章吗?@Guy Coder-不。有些人投票否决了我的问题。我只是想增加我的价值。我学的越多,练习的越多,展示的越多,我就越有价值……我知道,当你问一个新问题时,这是新的一天。你打算在x天内每天问一个肯定的问题来获得徽章吗?@Guy Coder-不。有些人投票否决了我的问题。我只是想增加我的价值。我学习的越多,实践的越多,证明的越多,我就越有价值…谢谢@scrwtp-但是,我得到了以下构建错误:“Task”与“AsyncWell”不兼容-在这种情况下,这些函数返回.NET
Tasks
,而不是F#
async
,您不能直接编写它们。请检查此线程如何处理:@scrwtp-感谢您为我提供有关推荐做法的指导。我已经更新了代码以反映您的指导。不过,我仍然不知道有关问题的答案。如果你愿意的话,我可以给你发一个单独的问题,让你把上面的答案贴出来,给你评分。现在这显然是本末倒置了。另外,请检查编辑。谢谢@scrwtp-但是,我得到以下生成错误:“Task”与“AsyncWell”不兼容-在这种情况下,这些函数返回.NET
Tasks
,而不是F#
Asyncs
,您不能直接编写它们。请检查此线程如何处理:@scrwtp-感谢您为我提供有关推荐做法的指导。我已经更新了代码以反映您的指导。不过,我仍然不知道有关问题的答案。如果你愿意的话,我可以给你发一个单独的问题,让你把上面的答案贴出来,给你评分。现在这显然是本末倒置了。此外,请检查编辑。