|  | @@ -120,8 +120,10 @@ class AsyncResult(ResultBase):
 | 
	
		
			
				|  |  |                                  terminate=terminate, signal=signal,
 | 
	
		
			
				|  |  |                                  reply=wait, timeout=timeout)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    def get(self, timeout=None, propagate=True, interval=0.5, no_ack=True,
 | 
	
		
			
				|  |  | -            follow_parents=True):
 | 
	
		
			
				|  |  | +    def get(self, timeout=None, propagate=True, interval=0.5,
 | 
	
		
			
				|  |  | +            no_ack=True, follow_parents=True,
 | 
	
		
			
				|  |  | +            EXCEPTION_STATES=states.EXCEPTION_STATES,
 | 
	
		
			
				|  |  | +            PROPAGATE_STATES=states.PROPAGATE_STATES):
 | 
	
		
			
				|  |  |          """Wait until task is ready, and return its result.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          .. warning::
 | 
	
	
		
			
				|  | @@ -160,16 +162,21 @@ class AsyncResult(ResultBase):
 | 
	
		
			
				|  |  |                  self.maybe_reraise()
 | 
	
		
			
				|  |  |              return self.result
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        try:
 | 
	
		
			
				|  |  | -            return self.backend.wait_for(
 | 
	
		
			
				|  |  | -                self.id, timeout=timeout,
 | 
	
		
			
				|  |  | -                propagate=propagate,
 | 
	
		
			
				|  |  | -                interval=interval,
 | 
	
		
			
				|  |  | -                on_interval=on_interval,
 | 
	
		
			
				|  |  | -                no_ack=no_ack,
 | 
	
		
			
				|  |  | -            )
 | 
	
		
			
				|  |  | -        finally:
 | 
	
		
			
				|  |  | -            self._get_task_meta()  # update self._cache
 | 
	
		
			
				|  |  | +        meta = self.backend.wait_for(
 | 
	
		
			
				|  |  | +            self.id, timeout=timeout,
 | 
	
		
			
				|  |  | +            propagate=propagate,
 | 
	
		
			
				|  |  | +            interval=interval,
 | 
	
		
			
				|  |  | +            on_interval=on_interval,
 | 
	
		
			
				|  |  | +            no_ack=no_ack,
 | 
	
		
			
				|  |  | +        )
 | 
	
		
			
				|  |  | +        if meta:
 | 
	
		
			
				|  |  | +            self._maybe_set_cache(meta)
 | 
	
		
			
				|  |  | +            status = meta['status']
 | 
	
		
			
				|  |  | +            if status in EXCEPTION_STATES:
 | 
	
		
			
				|  |  | +                return self.backend.exception_to_python(meta['result'])
 | 
	
		
			
				|  |  | +            if status in PROPAGATE_STATES and propagate:
 | 
	
		
			
				|  |  | +                raise self.backend.exception_to_python(meta['result'])
 | 
	
		
			
				|  |  | +            return meta['result']
 | 
	
		
			
				|  |  |      wait = get  # deprecated alias to :meth:`get`.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def _maybe_reraise_parent_error(self):
 | 
	
	
		
			
				|  | @@ -323,14 +330,16 @@ class AsyncResult(ResultBase):
 | 
	
		
			
				|  |  |      def children(self):
 | 
	
		
			
				|  |  |          return self._get_task_meta().get('children')
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    def _maybe_set_cache(self, meta):
 | 
	
		
			
				|  |  | +        if meta:
 | 
	
		
			
				|  |  | +            state = meta['status']
 | 
	
		
			
				|  |  | +            if state == states.SUCCESS or state in states.PROPAGATE_STATES:
 | 
	
		
			
				|  |  | +                return self._set_cache(meta)
 | 
	
		
			
				|  |  | +        return meta
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      def _get_task_meta(self):
 | 
	
		
			
				|  |  |          if self._cache is None:
 | 
	
		
			
				|  |  | -            meta = self.backend.get_task_meta(self.id)
 | 
	
		
			
				|  |  | -            if meta:
 | 
	
		
			
				|  |  | -                state = meta['status']
 | 
	
		
			
				|  |  | -                if state == states.SUCCESS or state in states.PROPAGATE_STATES:
 | 
	
		
			
				|  |  | -                    return self._set_cache(meta)
 | 
	
		
			
				|  |  | -            return meta
 | 
	
		
			
				|  |  | +            return self._maybe_set_cache(self.backend.get_task_meta(self.id))
 | 
	
		
			
				|  |  |          return self._cache
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def _set_cache(self, d):
 |