ConcurrentDictonary to IQuerable<T> - Безопасность потока

Я предполагаю, что та же логика из этого вопроса также относится к следующему фрагменту кода? Это означало бы, что перечислитель никогда не будет снимком во времени, и поэтому потребуется дополнительный примитив синхронизации. Это, конечно, не относится, если я взаимодействую со словарем напрямую.

public class InMemoryUserStore<TUser> :
        IQueryableUserStore<TUser>
        where TUser : User
    {
        private readonly ConcurrentDictionary<string, TUser> _users = new ConcurrentDictionary<string, TUser>();

        #region IQueryableUserStore<TUser>

        /// <summary>
        /// Return the dictionary as a <see cref="IQueryable{TUser}"/>.
        /// </summary>
        public IQueryable<TUser> Users => _users.Values.AsQueryable();

        #region CRUD

        /// <summary>
        /// Find a user by id.
        /// </summary>
        public Task<TUser> FindByIdAsync(string userId, CancellationToken cancellationToken = default(CancellationToken))
        {
            var user = Users.FirstOrDefault(u => u.Id == userId);
            if (user != null)
            {
                return Task.FromResult(user);
            }

            return Task.FromResult<TUser>(null);
        }
}

0 ответов

Другие вопросы по тегам