2017-04-18 39 views

回答

2

對於Task<'T>Async<'T>之間的轉換,有一個內置的Async.AwaitTask函數。

要和普通Task之間進行轉換Async<unit>你可以創建一個輔助函數:

type Async with 
    member this.AwaitPlainTask (task : Task) = 
     task.ContinueWith(fun t ->()) 
     |> Async.AwaitTask 

然後,你可以這樣調用:

let sendEmailAsync message = 
    async { 
     let! response = Async.AwaitPlainTask <|client.SendMessageAsync(message) 
     return response 
    } 

當然,在這種情況下,響應不能是除()之外的任何東西,所以你不妨寫下:

let sendEmailAsync message = Async.AwaitPlainTask <|client.SendMessageAsync(message) 
+0

非常感謝!我無法找到Async.AwaitPlainTask,而是我有Async.AwaitTask。 –

+0

啊,我的錯。我剛剛找到您創建的類型。 –

+0

@NishantNidhiKumar是的,這不是內置於核心庫,但它通常是有用的創建。 – TheInnerLight

相關問題