@award: I ran this by some folks who know async-await better than me and here is what they said. The problem with the code as I have it is that the lambda passed to the RelayCommand ignores the returned Task. This is fine when the call succeeds but any exceptions thrown by Save or Delete are ignored.
So they recommend making the lambda async and awaiting the task as follows:
SaveCustomer = new RelayCommand(async() => await Save());
They also recommend calling the method SaveAsync rather than Save.
@Tinytoot: That talk wasn't recorded. But it is based on a full day of training that will be on Microsoft Virtual Academy in mid January. Email me if you want to chat more about the topic (rogreen at microsoft).