1

知道对返回单元的服务器方法的 RPC 调用是消息传递调用,我想强制调用是异步的,并且只有在第一个服务器调用到达服务器后才能触发下一个服务器调用。

服务器代码:

[<Rpc>]
let FirstCall value =
    printfn "%s" value
    async.Zero()

[<Rpc>]
let SecondCall() =
    "test"

客户端代码:

|>! OnClick (fun _ _ -> async {
                            do! Server.FirstCall "test"
                            do Server.SecondCall() |> ignore
                        } |> Async.Start)

自从返回单元后,这似乎在客户端崩溃,将服务器和客户端代码替换为:

[<Rpc>]
let FirstCall value =
    printfn "%s" value
    async { return () }

let! _ = Server.FirstCall "test"

没有解决问题,而以下解决了:

[<Rpc>]
let FirstCall value =
    printfn "%s" value
    async { return "" }

let! _ = Server.FirstCall "test"

是否有另一种方法可以强制消息传递调用异步?

4

1 回答 1

2

这绝对是一个错误。我在这里添加了它:

https://bugs.intellifactory.com/websharper/show_bug.cgi?id=468

你的方法是完全合法的。您的解决方法也可能是目前最好的方法,例如,不要以零返回Async<unit>返回Async<int>并忽略它。

我们正忙于准备下周发布的 2.4 版本,修复将在那里完成。谢谢!

此外,在 2.4 中,我们将丢弃同步调用,因此您必须在整个 RPC 中使用异步,如https://bugs.intellifactory.com/websharper/show_bug.cgi?id=467中所述- 主要动机是不支持同步 AJAX 的新目标(Android 和 WP7)。

于 2011-08-06T15:55:06.873 回答