使用FSharp中的Task.FromResult(0)

Jam*_*xon 4 f#

我正在将一些遗留的C#类重写为F#.其中一个类使用this.SendAsync(identityMessage)的单个方法实现IIdentityMessageService.

在C#代码中,我看到了这一点

    if (transportWeb != null)
        return transportWeb.DeliverAsync(message);
    else
        return Task.FromResult(0);
Run Code Online (Sandbox Code Playgroud)

我在F#中试过这个

    if  transportWeb != null then
        transportWeb.DeliverAsync(message)
    else
        Task.FromResult(0)
Run Code Online (Sandbox Code Playgroud)

我在最后一行收到错误

This expression was expected to have type
    Task    
but here has type
    Task<'a>    
Run Code Online (Sandbox Code Playgroud)

我错过了什么?谢谢

Lee*_*Lee 8

它看起来像DeliverAsync返回一个Task,所以你需要两个分支返回一个Task.Task.FromResult(0)返回一个,Task<int>所以你需要明确地将它改为Task:

else
    Task.FromResult(0) :> Task
Run Code Online (Sandbox Code Playgroud)