다음을 통해 공유


ChangeBatchBase.EndOrderedGroup 메서드

변경 내용 일괄 처리에서 이전에 연 정렬된 그룹을 닫습니다.

네임스페이스: Microsoft.Synchronization
어셈블리: microsoft.synchronization.dll의 Microsoft.Synchronization

구문

‘선언
Public Sub EndOrderedGroup ( _
    itemId As SyncId, _
    madeWithKnowledge As SyncKnowledge _
)
‘사용 방법
Dim instance As ChangeBatchBase
Dim itemId As SyncId
Dim madeWithKnowledge As SyncKnowledge

instance.EndOrderedGroup(itemId, madeWithKnowledge)
public void EndOrderedGroup (
    SyncId itemId,
    SyncKnowledge madeWithKnowledge
)
public:
void EndOrderedGroup (
    SyncId^ itemId, 
    SyncKnowledge^ madeWithKnowledge
)
public void EndOrderedGroup (
    SyncId itemId, 
    SyncKnowledge madeWithKnowledge
)
public function EndOrderedGroup (
    itemId : SyncId, 
    madeWithKnowledge : SyncKnowledge
)

매개 변수

  • itemId
    이 정렬된 그룹에 대한 항목 ID의 닫힌 상한입니다. 상한을 무한대로 지정하려면 Infinity를 사용합니다.
  • madeWithKnowledge
    이 그룹을 만든 복제본의 정보입니다.

주의

그룹을 닫은 후에는 새 그룹을 열기 전까지 항목 변경 내용을 더 이상 변경 내용 일괄 처리에 추가할 수 없습니다.

예제

다음 예제에서는 변경 내용 일괄 처리의 정렬된 그룹에 항목을 추가하여 GetChangeBatch를 구현합니다. 변경 버전이 대상 정보에 포함되어 있지 않은 경우에만 항목이 추가됩니다.

Public Overrides Function GetChangeBatch(ByVal batchSize As UInteger, ByVal destinationKnowledge As SyncKnowledge) As ChangeBatch
    ' The destination knowledge must be converted to be compatible with the source replica
    ' before it can be used.
    Dim mappedDestKnowledge As SyncKnowledge = _knowledge.MapRemoteKnowledgeToLocal(destinationKnowledge)

    ' Create a new change batch, initialized by using the current knowledge of the source replica
    ' and a new ForgottenKnowledge object.
    Dim changeBatch As New ChangeBatch(IdFormats, GetKnowledge(), New ForgottenKnowledge())

    ' Start a group of changes in the change batch. The group is ordered by item ID.
    ' _getChangeBatchCurrent is 0 the first time GetChangeBatch is called, and is used to track the
    ' position in the metadata store for subsequent calls to GetChangeBatch.
    changeBatch.BeginOrderedGroup(_items.Values(_getChangeBatchCurrent).GlobalId)

    ' itemsAdded is incremented each time a change is added to the change batch. When itemsAdded
    ' is greater than the requested batch size, enumeration stops and the change batch is returned.
    Dim itemsAdded As Integer = 0

    Dim itemMeta As ItemMetadata

    ' Enumerate items and add a change to the change batch if it is not contained in the 
    ' destination knowledge.
    ' _items is a SortedList that contains ItemMetadata objects that are ordered by item ID.
    While itemsAdded <= batchSize AndAlso _getChangeBatchCurrent < _items.Count
        itemMeta = _items.Values(_getChangeBatchCurrent)
        Dim kind As ChangeKind = If((itemMeta.IsDeleted), ChangeKind.Deleted, ChangeKind.Update)
        Dim change As New ItemChange(IdFormats, ReplicaId, itemMeta.GlobalId, kind, itemMeta.CreationVersion, itemMeta.ChangeVersion)

        ' If the change is not contained in the destination knowledge, add it to the change batch.
        If Not mappedDestKnowledge.Contains(change) Then
            changeBatch.AddChange(change)
            itemsAdded += 1
        End If
        _getChangeBatchCurrent += 1
    End While

    ' End the group of changes in the change batch. Pass the current source knowledge.
    changeBatch.EndOrderedGroup(_items.Values(_getChangeBatchCurrent - 1).GlobalId, _knowledge)

    ' When all items in the metadata store have been enumerated, set this batch as the
    ' last batch.
    If _getChangeBatchCurrent = _items.Count Then
        changeBatch.SetLastBatch()
    End If

    Return changeBatch
End Function
public override ChangeBatch GetChangeBatch(uint batchSize, SyncKnowledge destinationKnowledge)
{
    // The destination knowledge must be converted to be compatible with the source replica
    // before it can be used.
    SyncKnowledge mappedDestKnowledge = _knowledge.MapRemoteKnowledgeToLocal(destinationKnowledge);

    // Create a new change batch, initialized by using the current knowledge of the source replica
    // and a new ForgottenKnowledge object.
    ChangeBatch changeBatch = new ChangeBatch(IdFormats, GetKnowledge(), new ForgottenKnowledge());

    // Start a group of changes in the change batch. The group is ordered by item ID.
    // _getChangeBatchCurrent is 0 the first time GetChangeBatch is called, and is used to track the
    // position in the metadata store for subsequent calls to GetChangeBatch.
    changeBatch.BeginOrderedGroup(_items.Values[_getChangeBatchCurrent].GlobalId);
    
    // itemsAdded is incremented each time a change is added to the change batch. When itemsAdded
    // is greater than the requested batch size, enumeration stops and the change batch is returned.
    int itemsAdded = 0;
    
    ItemMetadata itemMeta;

    // Enumerate items and add a change to the change batch if it is not contained in the 
    // destination knowledge.
    // _items is a SortedList that contains ItemMetadata objects that are ordered by item ID.
    for (; itemsAdded <= batchSize && _getChangeBatchCurrent < _items.Count; _getChangeBatchCurrent++)
    {
        itemMeta = _items.Values[_getChangeBatchCurrent];
        ChangeKind kind = (itemMeta.IsDeleted) ? ChangeKind.Deleted : ChangeKind.Update;
        ItemChange change = new ItemChange(IdFormats, ReplicaId, itemMeta.GlobalId, kind, itemMeta.CreationVersion, 
            itemMeta.ChangeVersion);

        // If the change is not contained in the destination knowledge, add it to the change batch.
        if (!mappedDestKnowledge.Contains(change))
        {
            changeBatch.AddChange(change);
            itemsAdded++;
        }
    }

    // End the group of changes in the change batch. Pass the current source knowledge.
    changeBatch.EndOrderedGroup(_items.Values[_getChangeBatchCurrent - 1].GlobalId, _knowledge);

    // When all items in the metadata store have been enumerated, set this batch as the
    // last batch.
    if (_getChangeBatchCurrent == _items.Count)
    {
        changeBatch.SetLastBatch();
    }

    return changeBatch;
}

참고 항목

참조

ChangeBatchBase 클래스
ChangeBatchBase 멤버
Microsoft.Synchronization 네임스페이스