为什么Task不返回null

Err*_*Efe 4 c# task-parallel-library

我正在使用新的任务并行库,今天就是这个案例:

此代码无法编译:

    internal Task<Guid?> SavePages(string[] pages)
    {
        return Task.Run(() =>
        {
            if (pages == null || pages.Length == 0)
                return null;

            ....
Run Code Online (Sandbox Code Playgroud)

除非我显式返回一个null可为空的Guid:

    internal Task<Guid?> SavePages(string[] pages)
    {
        return Task.Run(() =>
        {
            if (pages == null || pages.Length == 0)
                return (Guid?)null;

            // Check documents path access
Run Code Online (Sandbox Code Playgroud)

为什么这种行为,我做错了什么?我的意思是,我得到代码使用第二个选项,但不知道如果我滥用库,我的意思是,null总是为空,不是吗?

编译错误:

无法将lambda表达式转换为委托类型'System.Func',因为块中的某些返回类型不能隐式转换为委托返回类型

http://msdn.microsoft.com/en-us/library/dd460717.aspx

das*_*ght 5

这与编译器确定lambda类型的方式有关.返回plain时null,编译器唯一可以暗示的是返回一个对象.因此,您的无参数lambda兼容Task<object>.但是,函数的签名表示您正在返回Task<Guid?>,因此编译器从您的代码中隐含的返回类型不兼容.当你把它null转换为时Guid?,你为编译器提供了一个缺少的线索,使lambda成为a Task<Guid?>.