我需要在后台调用一个调用webservice的API。我不希望将(非常复杂的)方法变为异步,只需说"在背景上做所有这些"。
但我迷失了对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)
答案 0 :(得分:3)
如果您正在寻找简单的火并忘记启动API调用的样式,请不要在当前线程上使用结果,Async.Start(task)
可能就是您要查找的内容。它需要printf
工作流,在线程池上启动并立即返回,以便您的方法可以继续。
但是看到您需要更改导航或显示错误消息的结果,您可能需要在当前线程上同步调用Async
并等待其结果。
或者,如果您的应用程序模型允许,您可以执行以下操作:
SyncApi
这将在线程池上启动任务,导航离开,但是如果异步任务失败,它将触发错误消息。但是,它假定您的应用程序可以异步显示错误消息,例如弹出窗口,而不仅仅是在启动任务的页面的上下文中。