public Task <FindCustomersResult> FindCustomers(string customerName) { var tcs = new TaskCompletionSource <FindCustomersResult>(); var client = new MyClient(); client.FindCustomersCompleted += (object sender, FindCustomersCompletedEventArgs e) => { var result = new FindCustomersResult(); foreach (var customer in e.Customers) { var customerDetails = await GetCustomerDetails(customer.ID); result.CustomerDetails.Add(customerDetails); } tcs.SetResult(result); } client.FindCustomersAsync(customerName); return(tcs.Task); }