当参数是非泛型任务的func并作为方法提供时,无法调用重载

时间:2017-03-07 07:15:07

标签: c# generics func overloading

我有一个包含以下两种方法的课程

class Foo
{
    public async Task Perform(Func<Task> func)
    {
        await func();
    }

    public async Task Perform(Func<Task<bool>> func)
    {
        await func();
    }
}

当我用funcs

调用方法时,一切都按预期工作
await foo.Perform(async () => { /* */ }); // calls first method
await foo.Perform(async () => true); // calls second method

但是,如果我尝试使用方法委托调用第一个方法(Func<Task>),我会收到以下编译错误:&#34; 预期带有Task ReturnTask()签名的方法&#34;

class Bar
{
    public async Task Call()
    {
        var foo = new Foo();

        await foo.Perform(ReturnTask); // compilation error
        await foo.Perform(ReturnTaskOfBool); // works
    }

    private Task ReturnTask()
    {
        return Task.Completed;
    }

    private Task<bool> ReturnTaskOfBool()
    {
        return Task.FromResult(true);
    }
}

为什么会这样?除了使方法的名称独特之外,还有什么方法吗?

0 个答案:

没有答案
相关问题