Let's say I have an application that has two tasks running.
TriggerHour1 = new TimeSpan(0, 1, 0);
Task.Run(async () =>
{
while (true)
{
var triggerTime = DateTime.Today + TriggerHour1 - DateTime.Now;
if (triggerTime < TimeSpan.Zero)
triggerTime = triggerTime.Add(new TimeSpan(24, 0, 0));
await Task.Delay(triggerTime);
Console.WriteLine("RunningTask1 finished")
}
});
TriggerHour2 = new TimeSpan(0, 1, 0);
Task.Run(async () =>
{
while (true)
{
var triggerTime = DateTime.Today + TriggerHour2 - DateTime.Now;
if (triggerTime < TimeSpan.Zero)
triggerTime = triggerTime.Add(new TimeSpan(24, 0, 0));
await Task.Delay(triggerTime);
Console.WriteLine("RunningTask2 finished")
}
});
What happenes if we have a CPU with only one core? Will only one task run? Will the second tasks wait for the first thread to be available?
Edit: Let's say that Tasks 2 relies on Task 1 to be completed first. Will this always be the case on a single Core CPU?
int counter = 0;
TriggerHour1 = new TimeSpan(0, 1, 0);
Task.Run(async () =>
{
while (true)
{
var triggerTime = DateTime.Today + TriggerHour1 - DateTime.Now;
if (triggerTime < TimeSpan.Zero)
triggerTime = triggerTime.Add(new TimeSpan(24, 0, 0));
await Task.Delay(triggerTime);
Console.WriteLine("RunningTask1 finished");
counter += 100;
Console.WriteLine(counter);
}
});
TriggerHour2 = new TimeSpan(0, 1, 0);
Task.Run(async () =>
{
while (true)
{
var triggerTime = DateTime.Today + TriggerHour2 - DateTime.Now;
if (triggerTime < TimeSpan.Zero)
triggerTime = triggerTime.Add(new TimeSpan(24, 0, 0));
await Task.Delay(triggerTime);
Console.WriteLine("RunningTask2 finished");
Console.WriteLine(counter);
}
});
Will the first Task always run before?