Esempio n. 1
0
        public async Task <bool> ContainsAsync(string resourceUriString)
        {
            _ = resourceUriString ?? throw new ArgumentNullException(nameof(resourceUriString));

            long id = 1;
            ISigmaAlgebraChain chain = GrainFactory.GetGrain <ISigmaAlgebraChain>(id);

            if (await chain.ContainsAsync(resourceUriString))
            {
                return(await Task.FromResult(true));
            }

            int cnt = await chain.GetCountAsync();

            while (cnt > 0)
            {
                id++;
                chain = GrainFactory.GetGrain <ISigmaAlgebraChain>(id);
                if (await chain.ContainsAsync(resourceUriString))
                {
                    return(await Task.FromResult(true));
                }
            }

            return(await Task.FromResult(false));
        }
Esempio n. 2
0
        public async Task <bool> AddAsync(string resourceUriString)
        {
            _ = resourceUriString ?? throw new ArgumentNullException(nameof(resourceUriString));

            if (State.Container.Count < 1000 && !State.Container.Contains(resourceUriString))
            {
                State.Container.Add(resourceUriString);
                return(await Task.FromResult(true));
            }

            long nextId = State.Id;

            nextId++;

            ISigmaAlgebraChain nextChain = GrainFactory.GetGrain <ISigmaAlgebraChain>(nextId);

            while (await nextChain.GetCountAsync() >= 1000)
            {
                if (await nextChain.ContainsAsync(resourceUriString))
                {
                    return(await Task.FromResult(false));
                }

                nextId++;
                nextChain = GrainFactory.GetGrain <ISigmaAlgebraChain>(nextId);
            }

            if (await nextChain.ContainsAsync(resourceUriString))
            {
                return(await Task.FromResult(false));
            }

            bool result = await nextChain.AddAsync(resourceUriString);

            return(await Task.FromResult(result));
        }