ユニットを返すサーバーメソッドへの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"
代わりに、メッセージパッシング呼び出しを強制的に非同期にする別の方法はありますか?