That should work fine. Of course there are lot's of alternatives like:
If the amount of tasks is
always a constant:
Task[] task = new Task[4]{ new Task(), new Task(), new Task(), new Task() };
If the amount in the declaration can change:
for (int i = 0; i < task.Length; i++)
{
task[i] = new Task();
}
and so on..
As for storing you can use array which is lightweight and fast but if you want more flexibility and programmability against the collection then you could consider something from
System.Collections.Generic Namespace[
^]