Skip to content

delegate Task FooAsync() is passed a Func<Task<T>> hiding a bug #26

@johnterickson

Description

@johnterickson

This will not compile:

        delegate void Foo();
        void Call(Foo f) { f(); }
        void TestCall()
        {
            Call(() => { return true; } ); // CS8030 Anonymous function converted to a void returning delegate cannot return a value
        }

but this will:

        delegate Task FooAsync();
        Task CallAsync(FooAsync f) { return f(); }
        void TestCallAsync()
        {
            CallAsync(() => { return Task.FromResult(true); });
        }

FWIW this does throw an error:

        delegate Task FooAsync();
        Task CallAsync(FooAsync f) { return f(); }
        void TestCallAsync()
        {
            CallAsync(async () => { await Task.Yield();  return true; }); //CS8031 Async lambda expression converted to a 'Task' returning delegate cannot return a value. Did you intend to return 'Task<T>'?
        }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions