Advertisement
benjaminvr

Task testjes

Nov 27th, 2021
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.25 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading.Tasks;
  4. using System.Threading;
  5.  
  6.  
  7. public class Program
  8. {
  9.     public static void Main()
  10.     {
  11.         bool test1 = false;
  12.         bool test2 = false;
  13.         bool test3 = false;
  14.         bool test4 = false;
  15.         bool test5 = false;
  16.         bool test6 = true;
  17.        
  18.         List<Task> Tasks;
  19.        
  20.         if(test1){
  21.             Tasks = new();
  22.             Tasks.Add(Task.Run(() => {
  23.                 Console.WriteLine("Taak begonnen");
  24.                 Task.Delay(1000);
  25.                 Console.WriteLine("Taak beeindigd");          
  26.             }));
  27.             Tasks.Add(Task.Run(() => {
  28.                 Console.WriteLine("Taak begonnen");
  29.                 Task.Delay(1000);
  30.                 Console.WriteLine("Taak beeindigd");          
  31.             }));
  32.             Tasks.Add(Task.Run(() => {
  33.                 Console.WriteLine("Taak begonnen");
  34.                 Task.Delay(1000);
  35.                 Console.WriteLine("Taak beeindigd");          
  36.             }));
  37.             Console.WriteLine("Volgende lijn");
  38.             Task.WaitAll(Tasks.ToArray());
  39.             Console.WriteLine("Na WaitAll");
  40.         }
  41.         /* (Soms een andere output, te zien wie rapper is)
  42.             Indiceert dat Task begint voor WaitAll opgeroepen werd
  43.                     Taak begonnen
  44.                     Taak begonnen
  45.                     Taak begonnen
  46.                     Volgende lijn
  47.                     Taak beeindigd
  48.                     Taak beeindigd
  49.                     Taak beeindigd
  50.                     Na WaitAll
  51.             Indien WaitAll weggelaten wordt is het mogelijk dat "Taak beeindigd" nooit gelogd wordt aangezien de thread voor dat moment stopt.
  52.         */
  53.        
  54.         // Poging taak toevoegen na waitall
  55.         // Dit voert soms uit, soms niet.
  56.         /*
  57.         Tasks.Add(Task.Run(() => {
  58.             Console.WriteLine("Taak begonnen na waitall");
  59.             Task.Delay(1000);
  60.             Console.WriteLine("Taak beeindigd na waitall");          
  61.         }));
  62.         */
  63.        
  64.         if(test2){
  65.             Tasks = new();
  66.             Tasks.Add(Task.Run(() => {
  67.                 Console.WriteLine("Taak begonnen");
  68.                 Task.Delay(1000);
  69.                 Console.WriteLine("Taak beeindigd");
  70.                 Tasks.Add(Task.Run(() => {
  71.                     Console.WriteLine("Taak genest toegevoegd, aan WaitAll."); // werkt dit? het hoort immers bij de andere taak
  72.                     Task.Delay(1000);                                          // jammer genoeg niet het geval
  73.                     Console.WriteLine("Einde van geneste taak");
  74.                 }));
  75.             }));
  76.             Console.WriteLine("Volgende lijn");
  77.             Task.WaitAll(Tasks.ToArray());
  78.             Console.WriteLine("Na WaitAll");
  79.         }
  80.        
  81.         /*
  82.         Volgende ergens tegengekomen ^_-
  83.         https://stackoverflow.com/a/36633095/8623540
  84.         */
  85.         /*
  86.         if(test3){
  87.             Tasks = new();
  88.            
  89.             Proc PROC = new Proc();
  90.             //PROC.proc(ref Tasks);
  91.            
  92.             lock (Tasks) {
  93.                 Tasks.Add(Task.Run(() => {
  94.                     Console.WriteLine("Taak toegevoegd met proc.");
  95.                     Task.Delay(1000);                                        
  96.                     Console.WriteLine("Einde van taak toegevoegd met proc");
  97.                 }));
  98.             }
  99.            
  100.             lock (Tasks) {
  101.                 Tasks.Add(Task.Run(() => {
  102.                     Console.WriteLine("Taak2 toegevoegd met proc.");
  103.                     Task.Delay(1000);                                        
  104.                     Console.WriteLine("Einde van taak2 toegevoegd met proc");
  105.                 }));
  106.             }
  107.         }
  108.         */
  109.         /** 4 **/
  110.        
  111.         if(test4){
  112.             Proc proc = new();
  113.             //Tasks = new();
  114.             ThreadPool.QueueUserWorkItem(delegate { proc.OperatieIO(); }); // niks
  115.         }
  116.        
  117.         if(test5){
  118.             Proc proc = new();
  119.             ThreadPool.QueueUserWorkItem(
  120.                 new WaitCallback(delegate(object state) { // nada
  121.                     proc.OperatieIO();
  122.                 }), null
  123.             );
  124.         }
  125.         /*
  126.         6: Taak 1 begonnen
  127.         6: Voor WaitAll 1
  128.         6: Taak 1 beeindigd
  129.         6: Na WaitAll 1
  130.         6: Voor WaitAll 2
  131.         6: Taak 2 begonnen
  132.         6: Taak 2 beeindigd
  133.         6: Na WaitAll 2
  134.         */
  135.         if(test6){
  136.             Tasks = new();
  137.            
  138.             Tasks.Add(Task.Run(() => {
  139.                 Console.WriteLine("6: Taak 1 begonnen");
  140.                 Task.Delay(1000);
  141.                 Console.WriteLine("6: Taak 1 beeindigd");          
  142.             }));
  143.            
  144.             Console.WriteLine("6: Voor WaitAll 1");
  145.             Task.WaitAll(Tasks.ToArray());
  146.             Console.WriteLine("6: Na WaitAll 1");
  147.            
  148.             Tasks.Add(Task.Run(() => {
  149.                 Console.WriteLine("6: Taak 2 begonnen");
  150.                 Task.Delay(1000);
  151.                 Console.WriteLine("6: Taak 2 beeindigd");          
  152.             }));
  153.            
  154.             Console.WriteLine("6: Voor WaitAll 2");
  155.             Task.WaitAll(Tasks.ToArray());
  156.             Console.WriteLine("6: Na WaitAll 2");
  157.            
  158.  
  159.         }
  160.        
  161.                          
  162.                          
  163.     }
  164. }
  165.  
  166. public class Proc {
  167.    
  168.     public void OperatieIO(){
  169.         Console.WriteLine("OperatieIO Start");
  170.         Thread.Sleep(1000);
  171.         Console.WriteLine("OperatieIO Einde");
  172.     }
  173.    
  174.     public void voerUit(Delegate d, object[] parameters){
  175.         d.DynamicInvoke(parameters.Length > 0 ? parameters : null);
  176.     }
  177.    
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement