code: def open_mfbpchdataset(paths, concat_dim='time', compat='no_conflicts',
                         preprocess=None, lock=None, **kwargs):
      from xarray.backends.api import _MultiFileCloser
      dask = kwargs.pop('dask', False)
      if not dask:
          raise ValueError("Reading multiple files without dask is not supported")
      kwargs['dask'] = True
      if isinstance(paths, basestring):
          paths = sorted(glob(paths))
      if not paths:
          raise IOError("No paths to files were passed into open_mfbpchdataset")
      datasets = [open_bpchdataset(filename, **kwargs)
                  for filename in paths]
      bpch_objs = [ds._file_obj for ds in datasets]
      if preprocess is not None:
          datasets = [preprocess(ds) for ds in datasets]
      combined = xr.auto_combine(datasets, compat=compat, concat_dim=concat_dim)
      combined._file_obj = _MultiFileCloser(bpch_objs)
      combined.attrs = datasets[0].attrs
      ts = get_timestamp()
      fns_str = " ".join(paths)
      combined.attrs['history'] = (
          "{}: Processed/loaded by xbpch-{} from {}"
          .format(ts, ver, fns_str)
      )
      return combined