With the advantages of async I/O and it now being quite easy to code and compose (using Await and the TAP methods) I am wondering, if we should use async by default and only tune for performance by using sync when needed.
Async I/O frees the calling thread and allows to do something else while waiting for the result. On the other hand async I/O is a little slower than sync.
To enforce responsive UIs the WinRT designers found it acceptable to offer async-only methods.
AFAIK Windows file I/O internally is async. Looking at this naively it is not clear to me, why async file i/O in .NET should be slower than sync at all.
I generally favor simplicity and robustness and only tune for performance where necessary. In the past we used sync by default with the exception of calling some services and where platforms like the phone enforced async. We rarely tuned by using async.