code: def done(self, result, noraise=False):
          
          # [??] Should this be in a critical section?
  
          # Has done() already been called on this task?
          if self.ev_done.is_set():
              # ??
              if isinstance(self.result, Exception) and (not noraise):
                  raise self.result
              return self.result
  
          # calculate running time and other finalization
          self.endtime = time.time()
          try:
              self.totaltime = self.endtime - self.starttime
          except AttributeError:
              # task was not initialized properly
              self.totaltime = 0.0
          self.result = result
  
          # Release thread waiters
          self.ev_done.set()
  
          # Perform callbacks for event-style waiters
          self.make_callback('resolved', self.result)
  
          # If the result is an exception, then our final act is to raise
          # it in the caller, unless the caller explicitly supressed that
          if isinstance(result, Exception) and (not noraise):
              raise result
  
          return result
docs: This method is called when a task has finished executing.
          Subclass can override this method if desired, but should call
          superclass method at the end.