I have a multi-line textbox and I want to process each line with multi threads. This is just an example to learn tasks, but I'm going to be doing different tasks with the lines afterwards, not only print them.
For example let's say my textbox contains:
1
2
3
4
5
6
7
8
9
10
Using the following code:
List<Task> tasks = new List<Task>();
for (int i = 0; i < txtSearchTerms.Text.Length; i++)
{
int tmp = i;
Task t = new Task(() =>
{
Console.WriteLine(txtSearchTerms.Text[tmp]);
});
tasks.Add(t);
t.Start();
}
Task.WaitAll(tasks.ToArray());
foreach(Task t in tasks)
{
Console.WriteLine("Task {0}, Status {1}", t.Id, t.Status);
}
I get the following output:
1
3
4
5
6
7
8
9
1
0
2
Task 1, Status RanToCompletion
Task 2, Status RanToCompletion
Task 3, Status RanToCompletion
Task 4, Status RanToCompletion
Task 5, Status RanToCompletion
Task 6, Status RanToCompletion
Task 7, Status RanToCompletion
Task 8, Status RanToCompletion
Task 9, Status RanToCompletion
Task 10, Status RanToCompletion
Task 11, Status RanToCompletion
Task 12, Status RanToCompletion
Task 13, Status RanToCompletion
Task 14, Status RanToCompletion
Task 15, Status RanToCompletion
Task 16, Status RanToCompletion
Task 17, Status RanToCompletion
Task 18, Status RanToCompletion
Task 19, Status RanToCompletion
Task 20, Status RanToCompletion
Task 21, Status RanToCompletion
Task 22, Status RanToCompletion
Task 23, Status RanToCompletion
Task 24, Status RanToCompletion
Task 25, Status RanToCompletion
Task 26, Status RanToCompletion
Task 27, Status RanToCompletion
Task 28, Status RanToCompletion
Task 29, Status RanToCompletion
What is the reason of so many "empty spaces" and the extra tasks being ran for no reason and how to prevent it?
Any help is appreciated.