public void SetValue <T>(string columnId, int rowIndex, T value)
        {
            var update = new BatchedColumnUpdate <T> {
                ColumnId = columnId, Value = value, RowIndex = rowIndex
            };

            lock (_shared)
            {
                ITypedTableColumnUpdater <T> updater;
                var type = typeof(T);
                if (!_columnUpdaters.ContainsKey(type))
                {
                    updater = _onlyKeepLastValue ? CreateNormalColumnUpdaterLastValue <T>() : CreateNormalColumnUpdater <T>();
                    _columnUpdaters.Add(type, updater);
                }
                else
                {
                    updater = (ITypedTableColumnUpdater <T>)_columnUpdaters[type];
                }
                updater.Add(update);
            }
        }
 public void Add(BatchedColumnUpdate <T> update)
 {
     _updatesByRow[update.RowIndex] = update;
 }
 public void Add(BatchedColumnUpdate <T> update)
 {
     _updates.Enqueue(update);
 }