2014-11-16 25 views
4

我正在將一些遺留的C#類重寫到F#中。其中一個類的實現具有this.SendAsync(identityMessage)的單一方法使用FSharp的Task.FromResult(0)

在C#代碼,我看到IIdentityMessageService此

if (transportWeb != null) 
     return transportWeb.DeliverAsync(message); 
    else 
     return Task.FromResult(0); 

我嘗試了在F#這樣

if transportWeb != null then 
     transportWeb.DeliverAsync(message) 
    else 
     Task.FromResult(0) 

,我就上線得到一個錯誤

This expression was expected to have type 
    Task  
but here has type 
    Task<'a>  

我是什麼MI ssing?謝謝

回答

8

它看起來像DeliverAsync返回Task,所以你需要兩個分支返回Task。一個Task<int>所以你需要Task.FromResult(0)返回其顯式地向上轉型爲Task

else 
    Task.FromResult(0) :> Task 
+0

良好的通話。此外,我的代碼中有一個錯誤的空檢查。編譯器在我修復了返回值後捕獲了它。謝謝! –