【问题标题】:WebSharper force a message passing call to be asynchronousWebSharper 强制消息传递调用是异步的
【发布时间】:2011-10-21 12:31:04
【问题描述】:

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

还有其他方法可以强制消息传递调用异步吗?

【问题讨论】:

  • 我猜你的意思是Server.FirstCall而不是Server.ServerCall

标签: f# websharper


【解决方案1】:

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

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

您的方法完全合法。您的解决方法也可能是目前最好的,例如而不是返回 Async&lt;unit&gt; 返回 Async&lt;int&gt; 并忽略它。

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

此外,在 2.4 中,我们将放弃同步调用,因此您必须在 RPC 中始终使用 Async,正如 https://bugs.intellifactory.com/websharper/show_bug.cgi?id=467 中所讨论的那样——主要受不支持同步 AJAX 的新目标(Android 和 WP7)推动.

【讨论】:

  • 很高兴听到 - 放弃同步呼叫对我来说似乎是合乎逻辑的,但我假设您会保留消息传递呼叫?
  • 好主意。它们可以看作是对Async&lt;unit&gt; 案例的优化。
猜你喜欢
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
  • 2021-07-27
  • 2011-08-27
  • 1970-01-01
  • 2018-07-15
相关资源
最近更新 更多