CSharp · Console
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;
}