public Task <int> SaveChargeAsync(Charge charge) { TaskCompletionSource <int> tcs = new TaskCompletionSource <int>(); WcfExpenseService.ExpenseServiceClient client = this.CreateExpenseServiceClient(); client.SaveChargeCompleted += (_, e) => { if (this.VerifyResult(e, tcs)) { charge.ChargeId = e.Result; tcs.TrySetResult(e.Result); } }; client.SaveChargeAsync(WcfExpenseService.Charge.FromModelCharge(charge)); return(tcs.Task); }