簡體   English   中英

F#異步Lambda聲明

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM