docs: def poll(self, **kwargs):
          """Continously poll a cachablesource/cachearea combination
          
          Kwargs:
              cacheablesource: Elemtree.element object of cacheablesource
              cachearea: Elemtree.element object of cachearea
              exit_: threading.Event listener for app exit call message
          """
          source, area, delta = self.create_poller(**kwargs)
          area.initialize()
          while True:
              try:
                  count = trimmed = 0
                  if ITrimmableCacheArea.providedBy(area):
                      count, trimmed = area.trim(source.items())
                  else:
                      for item in list(source.items()):
                          if area.cache(item):
                              count += 1
                          if kwargs['exit_'].is_set():
                              break
                  if ITransactionalCacheArea.providedBy(area):
                      area.commit()
                  logger.info("Found %d new items in cachablesource %s" % \
                                  (count, kwargs['cacheablesource'].attrib['id']))
                  if trimmed:
                      logger.info("Trimmed %d items in cachablesource %s" % \
                                  (trimmed, kwargs['cacheablesource'].attrib['id']))
                  notify(CompletedCachableSourcePoll(source))
              except Exception:
                  if ITransactionalCacheArea.providedBy(area):
                      area.rollback()
                  logger.exception("Error importing cachable items into cache area")
              if not delta:
                  return
              for i in xrange(delta):
                  if kwargs['exit_'].is_set():
                      return
                  time.sleep(1)