public async Task MakeUpdate(ulong ServerLastUpCode) { if (Table.UpdateAble.UpdateCode > ServerLastUpCode) { Table.UpdateAble.Clear(); if (IsPartOfTable) { ParentTable.UpdateAble.Clear(); } } while (StartPos <= EndPos) { await FindLastTrue(); StartPos++; if (StartPos >= ServerItemsCount) { break; } else { var NextUpCode = await GetUpdateCodeAtPos(StartPos); DeleteExtraItems(NextUpCode); if (StartPos >= Table.UpdateAble.UpdateCodes.Length) { break; } var MyUpCode = Table.UpdateAble.UpdateCodes[StartPos]; if (MyUpCode.UpdateCode > NextUpCode) { await UpdateFromPosToUpCode(StartPos, MyUpCode.UpdateCode); } } } if (StartPos < ServerItemsCount) { await UpdateFromPosToEnd(StartPos); } else { DeleteItemsFrom(ServerItemsCount); } if (IsPartOfTable) { foreach (var Delete in ShouldDelete) { if (await IsExistAtParent(Delete)) { PartTable.Ignore(Delete); } else { PartTable.Delete(Delete); } } } else { foreach (var Delete in ShouldDelete) { Table.Delete(Delete); } } Table.UpdateAble.UpdateCode.Save(ServerLastUpCode); if (IsPartOfTable) { PartTable.SaveToParent(); } #if DEBUG_UpdateAble await Debuger(); #endif }