コード例 #1
0
        public Task Write(StoreItems changes)
        {
            lock (_syncroot)
            {
                foreach (var change in changes)
                {
                    StoreItem newValue = change.Value as StoreItem;
                    StoreItem oldValue = null;

                    if (_memory.TryGetValue(change.Key, out object x))
                    {
                        oldValue = x as StoreItem;
                    }
                    if (oldValue == null ||
                        newValue.eTag == "*" ||
                        oldValue.eTag == newValue.eTag)
                    {
                        // clone and set etag
                        newValue            = newValue.Clone() as StoreItem;
                        newValue.eTag       = (_eTag++).ToString();
                        _memory[change.Key] = newValue;
                    }
                    else
                    {
                        throw new Exception("etag conflict");
                    }
                }
            }
            return(Task.CompletedTask);
        }