PassAndRetrieveDataFromTask

CSharp · Console

/Program.cs

using System;
using System.Threading;
using System.Threading.Tasks;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

					
public class Program
{
	public static void Main()
	{
		AccessForLoopVariables();
		AccessForEachVariables();
		PassCustomData();
	}
	
	private static void AccessForLoopVariables()
	{
		Task[] taskArray = new Task[10];
		for(int i = 0; i < 10; i++) 
		{
			 taskArray[i] = Task.Factory.StartNew(() => Console.WriteLine($"Data: {i}"));
		}
		Task.WaitAll(taskArray);
	}
	
	private static void AccessForEachVariables()
	{
		List<Task> tasks = new List<Task>();
		string[] urls = Enumerable.Range(1, 10).Select(x => "Url-" + x.ToString()).ToArray();
		foreach(var url in urls)
		{
			 tasks.Add(Task.Factory.StartNew(() => Console.WriteLine($"Data: {url}")));
		}
		Task.WaitAll(tasks.ToArray());
	}
	
	private static void PassCustomData()
	{
		Task[] taskArray = new Task[10];
		for(int i = 0; i < 10; i++) 
		{
			 taskArray[i] = Task.Factory.StartNew((Object obj) => {
					var data = obj as CustomData;
				 	data.ThreadId = Thread.CurrentThread.ManagedThreadId;
			 	}, new CustomData { Index = i});
		}
		Task.WaitAll(taskArray);
		foreach (var task in taskArray) 
		{
        	var data = task.AsyncState as CustomData;
			Console.WriteLine($"ThreadId {data.ThreadId} Index: {data.Index}");
      	}
	}
}

class CustomData
{
   public int Index;
   public int ThreadId;
}
;