private suspend fun getSitePositions(apiRequest: ApiRequest): List = when (val positions = sitePositionsCache[apiRequest.siteId].awaitFirstOrNull()) { null -> { sitePositionsRequestMutex.withLock { when (val positions = sitePositionsCache[apiRequest.siteId].awaitFirstOrNull()) { null -> { val positions = apiService.getSitePositions(apiRequest) sitePositionsCache.fastPutIfAbsent(apiRequest.siteId, positions) positions } else -> positions } } } else -> positions }