Applying Asynchronous Programming in C#