std::future< void > Invoke(F&& f, const VoidType& ) {
     auto p = 
         std::make_shared< std::promise< void > >(std::promise< void >());
     auto ft = p->get_future();
     queue_.Push([=]() {
         try {
              f(data_);
              p->set_value();
          } catch(...) {
              p->set_exception(std::current_exception());
          }
     });
     return ft;
 } 
 ~ConcurrentAccess() {
     queue_.Push([=]{done_ = true;});
     f_.wait();
 }