code: def execAsync(self, func, *args, **kwargs):
          'Execute `func(*args, **kwargs)` in a separate thread.'
  
          thread = threading.Thread(target=self.toplevelTryFunc, daemon=True, args=(func,)+args, kwargs=kwargs)
          self.addThread(thread)
  
          if self.sheets:
              currentSheet = self.sheets[0]
              currentSheet.currentThreads.append(thread)
          else:
              currentSheet = None
  
          thread.sheet = currentSheet
          thread.start()
  
          return threaf execAsync(self, func, *args, **kwargs):
          'Execute `func(*args, **kwargs)` in a separate thread.'
  
          thread = threading.Thread(target=self.toplevelTryFunc, daemon=True, args=(func,)+args, kwargs=kwargs)
          self.addThread(thread)
  
          if self.sheets:
              currentSheet = self.sheets[0]
              currentSheet.currentThreads.append(thread)
          else:
              currentSheet = None
  
          thread.sheet = currentSheet
          thread.start()
  
          return thread
docs: Execute `func(*args, **kwargs)` in a separate thread.