Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Threading.Tasks;
- using System.Threading;
- public class Program
- {
- public static void Main()
- {
- bool test1 = false;
- bool test2 = false;
- bool test3 = false;
- bool test4 = false;
- bool test5 = false;
- bool test6 = true;
- List<Task> Tasks;
- if(test1){
- Tasks = new();
- Tasks.Add(Task.Run(() => {
- Console.WriteLine("Taak begonnen");
- Task.Delay(1000);
- Console.WriteLine("Taak beeindigd");
- }));
- Tasks.Add(Task.Run(() => {
- Console.WriteLine("Taak begonnen");
- Task.Delay(1000);
- Console.WriteLine("Taak beeindigd");
- }));
- Tasks.Add(Task.Run(() => {
- Console.WriteLine("Taak begonnen");
- Task.Delay(1000);
- Console.WriteLine("Taak beeindigd");
- }));
- Console.WriteLine("Volgende lijn");
- Task.WaitAll(Tasks.ToArray());
- Console.WriteLine("Na WaitAll");
- }
- /* (Soms een andere output, te zien wie rapper is)
- Indiceert dat Task begint voor WaitAll opgeroepen werd
- Taak begonnen
- Taak begonnen
- Taak begonnen
- Volgende lijn
- Taak beeindigd
- Taak beeindigd
- Taak beeindigd
- Na WaitAll
- Indien WaitAll weggelaten wordt is het mogelijk dat "Taak beeindigd" nooit gelogd wordt aangezien de thread voor dat moment stopt.
- */
- // Poging taak toevoegen na waitall
- // Dit voert soms uit, soms niet.
- /*
- Tasks.Add(Task.Run(() => {
- Console.WriteLine("Taak begonnen na waitall");
- Task.Delay(1000);
- Console.WriteLine("Taak beeindigd na waitall");
- }));
- */
- if(test2){
- Tasks = new();
- Tasks.Add(Task.Run(() => {
- Console.WriteLine("Taak begonnen");
- Task.Delay(1000);
- Console.WriteLine("Taak beeindigd");
- Tasks.Add(Task.Run(() => {
- Console.WriteLine("Taak genest toegevoegd, aan WaitAll."); // werkt dit? het hoort immers bij de andere taak
- Task.Delay(1000); // jammer genoeg niet het geval
- Console.WriteLine("Einde van geneste taak");
- }));
- }));
- Console.WriteLine("Volgende lijn");
- Task.WaitAll(Tasks.ToArray());
- Console.WriteLine("Na WaitAll");
- }
- /*
- Volgende ergens tegengekomen ^_-
- https://stackoverflow.com/a/36633095/8623540
- */
- /*
- if(test3){
- Tasks = new();
- Proc PROC = new Proc();
- //PROC.proc(ref Tasks);
- lock (Tasks) {
- Tasks.Add(Task.Run(() => {
- Console.WriteLine("Taak toegevoegd met proc.");
- Task.Delay(1000);
- Console.WriteLine("Einde van taak toegevoegd met proc");
- }));
- }
- lock (Tasks) {
- Tasks.Add(Task.Run(() => {
- Console.WriteLine("Taak2 toegevoegd met proc.");
- Task.Delay(1000);
- Console.WriteLine("Einde van taak2 toegevoegd met proc");
- }));
- }
- }
- */
- /** 4 **/
- if(test4){
- Proc proc = new();
- //Tasks = new();
- ThreadPool.QueueUserWorkItem(delegate { proc.OperatieIO(); }); // niks
- }
- if(test5){
- Proc proc = new();
- ThreadPool.QueueUserWorkItem(
- new WaitCallback(delegate(object state) { // nada
- proc.OperatieIO();
- }), null
- );
- }
- /*
- 6: Taak 1 begonnen
- 6: Voor WaitAll 1
- 6: Taak 1 beeindigd
- 6: Na WaitAll 1
- 6: Voor WaitAll 2
- 6: Taak 2 begonnen
- 6: Taak 2 beeindigd
- 6: Na WaitAll 2
- */
- if(test6){
- Tasks = new();
- Tasks.Add(Task.Run(() => {
- Console.WriteLine("6: Taak 1 begonnen");
- Task.Delay(1000);
- Console.WriteLine("6: Taak 1 beeindigd");
- }));
- Console.WriteLine("6: Voor WaitAll 1");
- Task.WaitAll(Tasks.ToArray());
- Console.WriteLine("6: Na WaitAll 1");
- Tasks.Add(Task.Run(() => {
- Console.WriteLine("6: Taak 2 begonnen");
- Task.Delay(1000);
- Console.WriteLine("6: Taak 2 beeindigd");
- }));
- Console.WriteLine("6: Voor WaitAll 2");
- Task.WaitAll(Tasks.ToArray());
- Console.WriteLine("6: Na WaitAll 2");
- }
- }
- }
- public class Proc {
- public void OperatieIO(){
- Console.WriteLine("OperatieIO Start");
- Thread.Sleep(1000);
- Console.WriteLine("OperatieIO Einde");
- }
- public void voerUit(Delegate d, object[] parameters){
- d.DynamicInvoke(parameters.Length > 0 ? parameters : null);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement