0

I'm puzzled by Task.Status in .Net. I run 2 tasks synchronously and await any of them finishes. The code is very simple:

var task1 = Task.Run(() => Task.Delay(9000));
Debug.WriteLine(DateTime.Now + $" Task 1 started (Id={task1.Id})");

var task2 = Task.Run(() => Task.Delay(8500));
Debug.WriteLine(DateTime.Now + $" Task 2 started (Id={task2.Id})");

Task firstFinieshed = await Task.WhenAny(task1, task2);
Debug.WriteLine(DateTime.Now + $" 'JDE_Scan' - First action finished (Id={firstFinieshed.Id},Status={firstFinieshed.Status}). Task1 status={task1.Status}, Task2 status={task2.Status}");

await Task.Delay(1000);
Debug.WriteLine(DateTime.Now + $" 'JDE_Scan' - . Task1 status={task1.Status}, Task2 status={task2.Status}");
I would expect that when task2 has finished the task1 is already running (and in fact it is) but when checking its status it's WaitingForActivation.. 1 second later, though, its status is RanToCompletion. Please find below output log:

[0:] 20.08.2019 15:18:54 Task 1 started (Id=1)
[0:] 20.08.2019 15:18:54 Task 2 started (Id=2)
[0:] 20.08.2019 15:19:02 - First action finished (Id=2,Status=RanToCompletion). Task1 status=WaitingForActivation, Task2 status=RanToCompletion
[0:] 20.08.2019 15:19:04 'JDE_Scan' - . Task1 status=RanToCompletion, Task2 status=RanToCompletion

So it seems everything is working as it should be (tasks are running synchronously and the shorter one finishes first) but I would expect the status of the longer task to running (and not WaitingForActivation) at the moment when first one finished. 1 Second later it's RanToCompletion and that's right. Am I doing something wrong or it's some weird .Net behavior? I run it in Xamarin.forms project, don't know if that's relevant info.

Gabriel Luci
  • 38,328
  • 4
  • 55
  • 84
robs23
  • 135
  • 1
  • 13
  • 2
    This is answered here: [Async always WaitingForActivation](https://stackoverflow.com/questions/20830998/async-always-waitingforactivation). – Gabriel Luci Aug 20 '19 at 13:56
  • Thanks, I must have overlooked it.. I understand the arguments, but still 'running' status would seem more fitting – robs23 Aug 27 '19 at 09:08

0 Answers0