0

我假设这个问题的相同逻辑也适用于以下代码片段?这意味着枚举器永远不会是及时的快照,因此需要一个额外的同步原语。如果我直接与字典交互,这当然不适用。

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);
        }
}
4

0 回答 0