Что бы вы ни делали, я бы сказал, что реальное место, где можно справиться, - это сделать один звонок в службу за единицу, а не 3.
Желательно, если список пунктов невелик, сделать один звонок в сервис со всем списком ...
private void btnSave_Click(object sender, RoutedEventArgs e)
{
List<Item> itemList = GetList();
foreach(Item i in itemList)
{
DoAllTheWorkAndUpdate(i);
}
}
или ...
private void btnSave_Click(object sender, RoutedEventArgs e)
{
List<Item> itemList = GetList();
foreach(Item i in itemList)
{
if(i.Id == 0)
{
DoLotsOfWorkAndUpdate(i);
}
else
{
DoSomeWorkAndUpdate(i);
}
}
}
или ...
private void btnSave_Click(object sender, RoutedEventArgs e)
{
List<Item> itemList = GetList();
DoTheWorkOnTheWholeList(itemList);
}
Другими словами, такое чувство, что некоторые из ваших обязанностей могут быть неуместны - я обычно предпочитаю оказывать услуги, когда я могу сделать им один звонок. Тогда асинхронная природа не имеет значения, потому что вы не выполняете последовательность событий.