IList<MessageModel> GetSyncMessages() { // during cloning, someone could modify it and break the enumerator lock (MessageBuffer) { if (MessageBuffer.Count == 0) { return new List<MessageModel>(0); } if (MessagesSyncCount <= 0) { return new List<MessageModel>(MessageBuffer); } else { var offset = MessageBuffer.Count - MessagesSyncCount; if (offset < 0) { offset = 0; } return MessageBuffer.GetRange(offset, MessagesSyncCount); } } }