1. with Dynamic_Tasks;           use Dynamic_Tasks; 
  2. with Dynamic_Tasks_Finalizer; use Dynamic_Tasks_Finalizer; 
  3. with Scoped_Tasks;            use Scoped_Tasks; 
  4. with Scoped_Tasks_Finalizer;  use Scoped_Tasks_Finalizer; 
  5.  
  6. procedure Scoped_vs_Dynamic_Finalization is 
  7.  
  8.    Array_of_Scoped_Tasks  : array (Few_Colours) of Scoped_Task; 
  9.    Array_of_Dynamic_Tasks : array (Few_Ids)     of Dynamic_Task_Ptr; 
  10.  
  11. begin 
  12.  
  13.    for i in Array_of_Scoped_Tasks'Range loop 
  14.       Finalizer.Register (Id => Array_of_Scoped_Tasks (i)'Identity); 
  15.       Array_of_Scoped_Tasks (i).Hand_over_Task_Id (i); 
  16.    end loop; 
  17.  
  18.    for i in Array_of_Dynamic_Tasks'Range loop 
  19.       Array_of_Dynamic_Tasks (i).all.Start; 
  20.       Finalizer_Deallocator.Register (Array_of_Dynamic_Tasks (i)); 
  21.       Array_of_Dynamic_Tasks (i) := new Dynamic_Task (i); 
  22.    end loop; 
  23.  
  24. end Scoped_vs_Dynamic_Finalization;