C# : Task Parallel Library (TPL) with async await and TaskCompletionSource for async I/O operations