public Task <CustomerDetails> GetCustomerDetails(int customerId) { var tcs = new TaskCompletionSource <CustomerDetails>(); var client = new MyClient(); client.GetCustomerDetailsCompleted += (object sender, GetCustomerDetailsCompletedEventArgs e) => { var result = new CustomerDetails(); result.Name = e.Name; tcs.SetResult(result); } client.GetCustomerDetailsAsync(customerId); return(tcs.Task); }