Does the lack of the async keyword in interfaces break DI in C#5.0?
<p>I was excited to create my first app with C#5.0, and I wanted to use the async/await keywords to ease the pains of async data calls.</p>

<p>I'm a bit baffled that interfaces does not allow the async keyword to be part of the contract, as the await keyword only works for async marked methods. This would mean that it is impossible to call async methods through interface references. This also goes for abstract methods. Am I missing something here? This would mean that my regular DI-stuff will no longer work:</p>

<pre><code>IAsyncRepository&lt;T&gt; {
 Task&lt;IList&lt;T&gt;&gt; GetAsync(); // no 'async' allowed
}

abstract class AsyncRepositoryBase&lt;T&gt; {
 public abstract Task&lt;IList&lt;T&gt;&gt; GetAsync(); // no 'async' allowed
</code></pre>

<p>// client code:</p>

<pre><code>IAsyncRepository&lt;Model&gt; repo = ioc.Resolve&lt;IAsyncRepository&lt;Model&gt;&gt;();
var items = await repo.GetAsync(); // DOOOOOH, will not compile!
</code></pre>

<p>This is my current solution:</p>

<pre><code>public abstract class AsyncRepositoryBase&lt;T&gt;
{
    protected Task&lt;IList&lt;T&gt;&gt; _fetcherTask;

    protected AsyncRepositoryBase(Task&lt;IList&lt;T&gt;&gt; fetcherTask)
    {
        _fetcherTask = fetcherTask;
    }

    public virtual async Task&lt;IList&lt;T&gt;&gt; GetASync()
    {
        return await _fetcherTask;
    }
}
</code></pre>

<p>Will I have to choose between abstraction and the langauge feature? Please tell me I'm missing something. </p>
