WebSharper 强制消息传递调用异步
知道对返回单元的服务器方法的 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"
是否有另一种方法可以强制消息传递调用异步反而?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这绝对是一个错误。我在这里添加了它:
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>
returnAsync<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.