public VertexField GetVertexField(string vertexId, JObject currVertexObject = null, Dictionary <string, JObject> edgeDocSet = null) { try { this._lock.EnterUpgradeableReadLock(); try { this._lock.EnterWriteLock(); VertexField result; if (!_cachedVertexField.TryGetValue(vertexId, out result)) { JObject vertexObject = currVertexObject ?? this.Connection.RetrieveDocumentById(vertexId); result = FieldObject.ConstructVertexField(this.Connection, vertexObject, edgeDocSet); _cachedVertexField.Add(vertexId, result); } return(result); } finally { if (this._lock.IsWriteLockHeld) { this._lock.ExitWriteLock(); } } } finally { if (this._lock.IsUpgradeableReadLockHeld) { this._lock.ExitUpgradeableReadLock(); } } }