[英]F# async lambda declaration
在C#Xamarin iOS中,我可以這樣做:
InvokeOnMainThread( () => { //do stuff here});
其中InvokeOnMainThread的參數是NSAction
在F#中,我必須做
InvokeOnMainThread (new NSAction(fun _ -> //do stuff here))
但是在C#中我也可以
InvokeOnMainThread (async () => { //do stuff here});
我將如何在F#中執行相同的操作?
另外,就我而言,在C#中我這樣做:
InvokeOnMainThread(async() => { await Task.Delay(1100); });
我該如何在F#中表達同一件事?
我沒有安裝Xamarin來實際嘗試此操作,但是我認為以下方法可以解決問題:
InvokeOnMainThread(NSAction(fun _ ->
async { do! Async.Sleep(1000)
(* some more stuff *) }
|> Async.StartImmediate
))
我有點困惑為什么您需要指定NSAction
委托類型,但是我想它可能存在一些重載問題,因此也許實際上是需要的。
上面的示例創建了一個普通的lambda函數,該函數在函數主體內創建一個異步塊,然后立即在當前線程上啟動它。 這是一個合理的選擇,因為您是從睡眠開始的-但是,如果您要進行一些CPU密集型工作,最好使用Async.Start
在后台啟動異步。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.