Do we really need async?

The syntactic sugars are helpful features of C# language. We can use using(var tmp = new ...()) {} instead of Dispose(), we have common foreach instead of while loop with iterating enumerator, and we have await and async. But think a while… do we really need async word?

This piece of code seems to be valid in older .NET, but if we want to use asychronous programming without async keyword, there is a clear ambiguity. In AddSomeObjects method old .NET would invoke obviously binary operator which adds Number properties of both objects and returns a new object with the new value. However, how should it behave in .NET 4.5? Should it return the same value as in the old .NET or should it wait for a result for `bwait` object with Number property incremented by 1?

Async as variable name

I like simple syntax in languages, so I believe that this artificial impediment could be avoided, but being more restrictive on upgrading to C# 5. The simple solution is just forbidding to use await keyword as a variable identifier. Microsoft didn’t do that, so we can have a method like this, which has valid syntax:

public static int Test(int await)
{
return await;
}

In my opinion, if someone does so big step as moving to new version of a platform, (s)he’s prepared for some changes. Why not do require so simple one, like renaming identifiers?