When canceling a task that has a timeout (before the timeout has ended) using a cancel token an exception is thrown. Example:
mytask.start();
bool didTaskRunInTime = mytask.wait(5 mins, _cancelToken);
Which means I cannot go on like below.
//was the task cancelled
if (_cancelToken.IsCancelRequested)
{
// log cancel from user to file etc
}
if (didTaskRunInTime )
{
int taskResult = myTask.Result;
// log result to file
}
else if (!_cancelToken.IsCancelRequested)
{
// Tell user task timed out , log a message etc
}
I will have to do all this in my catch block and my code is looking messy. What is the correct way to do this?
try to use OperationCanceledException
You could call
Task.WaitAny
with an array of just that task. Then you can act on the status of the task, however the method returns. Sample code:Note that if the task is faulted, you should "observe" the exception in order to avoid it going bang when it's finalized :)