ウェブサービスを呼び出すAPIをバックグラウンドで呼び出す必要があります。私は(非常に複雑な)メソッドを非同期にすることはしません。ちょうど "これをバックグラウンドで行う"と言うだけです。F#でブロッキングコールをバックグラウンドで実行するにはどうすればよいですか?
しかし、私はF#でこれをどうやってやっていますか?
let task = async {
let result = SyncApi.syncData(login.url, login.zone, login.user, login.pwd) <-- THIS MUST RUN IN BACKGROUND...
match result with
|Some(msg) -> failwith msg
| None ->()
}
task
|> Async.Catch
|> Async.RunSynchronously
|> fun x ->
match x with
| Choice1Of2 x -> rootPage.Navigation.PopToRootAsync(true) |> ignore
| Choice2Of2 ex -> showMsgError(ex.Message)
いいえ、エラーを無視してナビゲートすることはできません。 – mamcx
最初にバックグラウンドでAPIを呼び出す必要があるのはなぜですか?処理中にUIを応答させる場合、エラーメッセージを非同期的に表示することはできませんが、私は非同期メソッド全体を作成する以外の方法はわかりません。メソッドを高速化したい場合は、エラーを示す同期ポイントが問題です。処理が終了するまで待たずに、処理結果を待たなければなりません。 –
はい、UIを反応させるためのものです。これを行うのは簡単ですが、別のスレッドでタスクをスケジュールするだけです:https://stackoverflow.com/questions/24056205/how-to-use-background-thread-in-swift – mamcx