Esempio n. 1
0
        /// <summary>
        /// Lookup actor
        /// </summary>
        /// <param name="actorType">actor type</param>
        /// <param name="actorKey">actor key</param>
        /// <param name="actorInstance">return instance</param>
        /// <returns>true or false</returns>
        public bool TryGetValue(Type actorType, ActorKey actorKey, out ActorInstance actorInstance)
        {
            actorType.VerifyNotNull(nameof(actorType));
            actorKey.VerifyNotNull(nameof(actorKey));

            lock (_lock)
            {
                bool status = _actorCache.TryGetValue(new ActorTypeKey(actorType, actorKey), out actorInstance);
                _logger.LogTrace($"{nameof(TryGetValue)}: status={status}, actorKey={actorKey}");

                return(status);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Remove actor from container
        /// </summary>
        /// <param name="actorType">actor type</param>
        /// <param name="actorKey">actor key</param>
        /// <returns>actor registration or null if not exist</returns>
        public bool TryRemove(Type actorType, ActorKey actorKey, out ActorInstance actorInstance)
        {
            actorKey.VerifyNotNull(nameof(actorKey));

            lock (_lock)
            {
                bool status = _actorCache.TryRemove(new ActorTypeKey(actorType, actorKey), out actorInstance);
                _logger.LogTrace($"{nameof(TryRemove)}: Removing actor {actorKey}, status={status}");

                if (!status)
                {
                    return(status);
                }
            }

            actorInstance.Instance
            .Deactivate().GetAwaiter().GetResult();

            return(true);
        }