Async events firing out of expected sequence. - C#