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

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)