Я работаю над приложением WP7, которое синхронизируется с облачным REST API.Для обработки синхронизации есть несколько вызовов, которые должны быть упорядочены, так как результат последнего вызова используется в следующем.Я использую RestSharp для обработки вызовов и замыканий для вложения.Я заканчиваю тем, что шаблон выглядит так:
void SyncMe()
{
MyProvider tp = new MyProvider(_userInfo.UserKey);
AccountInfoProvider.GetAccountInfo(_userInfo, (accountInfoArgs) =>
{
if (accountInfoArgs.Status == ResponseStatus.Success) {
var set1 = from t in coll
where t.SyncStatus == SyncStatus.New
select t;
tp.AddRange(set1, (response) =>
{
if (response.Status == ResponseStatus.Success) // Keep going
{
HandleStep1(response.MySet);
var set2 = from t in coll
where t.SyncStatus == SyncStatus.Deleted
select t;
tp.DeleteRange(set2, (deleteResponse) =>
{
if (deleteResponse.Status == ResponseStatus.Success) {
// Check if items were updated on the server since last sync
if (accountInfo.LastEdited > _userInfo.UserLastSync) {
tp.Query(new Query() { ModifiedAfter = _userInfo.UserLastSync }, (results) =>
{
if (results.Status == OperationStatus.Success) {
HandleStep2(tp);
}
else {
}
});
}
else {
HandleStep2(tp);
}
//callback(new SyncCompletedEventArgs(ResponseStatus.Success));
}
else {
}
});
}
else {
}
});
}
else {
}
});
}
}
, что, по общему признанию, довольно уродливо.Есть лучший способ сделать это?Я пробовал ManualResetEvents и не могу заставить их работать (когда я вызываю WaitOne (), приложение просто зависает).Я искал Rx, и я пытаюсь выяснить, может ли это чем-нибудь помочь здесь, но документация не требует решения.Вся модель Async здесь усложняет реализацию здесь, где вызовы синхронизации были бы простыми.Есть мысли о более элегантном подходе?
Спасибо, К