private Task<bool> SaveTask(RoyaltyServiceWorker.AccountService.AccountSeriesOfNumbersRecord item) { var startTask = Task.Factory.StartNew(() => { IsBusy = true; }, GetCancellationToken(), TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext()); var clientTask = startTask.ContinueWith((t) => { var client = new RoyaltyServiceWorker.AccountService.AccountServiceClient(); try { return item.Id == default(long) ? client.PutSeriesOfNumbers(item) : client.UpdateSeriesOfNumbers(item); } finally { try { client.Close(); } catch { } } }, GetCancellationToken(), TaskContinuationOptions.AttachedToParent, TaskScheduler.Default); var taskRes = clientTask.ContinueWith((res) => { try { if (res.Result.Error != null) throw new Exception(res.Result.Error); item.CopyObjectFrom(res.Result.Value); return true; } catch(Exception ex) { Error = ex.ToString(); return false; } finally { IsBusy = false; } }, GetCancellationToken(), TaskContinuationOptions.AttachedToParent, TaskScheduler.FromCurrentSynchronizationContext()); return taskRes; }