In the following code snippet,

```
class Program
{
    static async Task Work()
    {
        await Task.Delay(1000);
    }

    static async Task Main()
    {
        // Action a =  Work;
        Action b = async () => await Task.Delay(1000);
        Action c =  async delegate () { await Task.Delay(1000);  };
    }
}

```

delegates of type `Action` cannot be assigned to a method `Work` of type `Task` but weirdly can be assigned to an anonymous method or a lambda of type `Task`.

In my understanding

* `Work`
* `async () => await Task.Delay(1000)`
* `async delegate () { await Task.Delay(1000); }`

have the same signature that are not compatible to `Action`. What causes this inconsistency?

Edit:
=====

The following lambda and anonymous method

* `async () => await Task.Delay(1000)`
* `async delegate () { await Task.Delay(1000); }`

can represent both `Action` or `Func<Task>` depending on the left hand side of assignment. More precisely,

Converted to `Action` implicitly,

* `Action a = async () => await Task.Delay(1000)`
* `Action b = async delegate () { await Task.Delay(1000); }`

Converted to `Func<Task>` implicitly,

* `Func<Task> a = async () => await Task.Delay(1000)`
* `Func<Task> b = async delegate () { await Task.Delay(1000); }`

Is it @JSteward's comment below about?