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