WebSharper 强制消息传递调用异步

发布于 2024-11-28 00:51:10 字数 871 浏览 0 评论 0 原文

知道对返回单元的服务器方法的 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"

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

Knowing an RPC call to a server method that returns unit is a message passing call, I want to force the call to be asynchronous and be able to fire the next server call only after the first one has gone to the server.

Server code:

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

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

Client code:

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

This seems to crash on the client since returning unit, replacing the server and client code to:

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

let! _ = Server.FirstCall "test"

Didn't fix the problem, while the following did:

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

let! _ = Server.FirstCall "test"

Is there another way to force a message passing call to be asynchronous instead?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凉月流沐 2024-12-05 00:51:10

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

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

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

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

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

This is most definitely a bug. I added it here:

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

Your approach is completely legit. Your workaround is also probably the best for now, e.g. instead of returning Async<unit> return Async<int> with a zero and ignore it.

We are busy with preparing the 2.4 release due next week and the fix will make it there. Thanks!

Also, in 2.4 we'll be dropping synchronous calls, so you will have to use Async throughout for RPC, as discussed in https://bugs.intellifactory.com/websharper/show_bug.cgi?id=467 -- primarily motivated by new targets (Android and WP7) that do not support sync AJAX.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文