You need to ensure that the second operation is invoked only if the data processing operation throws an unhandled exception

You use the Task.Run() method to launch a long-running data processing operation. The data
processing operation often fails in times of heavy network congestion.
If the data processing operation fails, a second operation must clean up any results of the first
operation.
You need to ensure that the second operation is invoked only if the data processing operation
throws an unhandled exception.
What should you do?

You use the Task.Run() method to launch a long-running data processing operation. The data
processing operation often fails in times of heavy network congestion.
If the data processing operation fails, a second operation must clean up any results of the first
operation.
You need to ensure that the second operation is invoked only if the data processing operation
throws an unhandled exception.
What should you do?

A.
Create a TaskCompletionSource<T> object and call the TrySetException() method of the object.

B.
Create a task by calling the Task.ContinueWith() method.

C.
Examine the Task.Status property immediately after the call to the Task.Run() method.

D.
Create a task inside the existing Task.Run() method by using the AttachedToParent option.



Leave a Reply 7

Your email address will not be published. Required fields are marked *


Jun Yang

Jun Yang

Task.ContinueWith:Creates a continuation that executes asynchronously when the target Task completes.

playhard

playhard

still doesnt make sense

playhard

playhard

You can use the TaskContinuationOptions.AttachedToParent option so that the parent and child tasks are synchronized. this would also work.
Option B doesnt exist
never heard of A

Lord Vader

Lord Vader

Daniel says:
November 20, 2016 at 10:30 am
Answer id B

static void Main(string[] args)
{
var task = Task.Run(() =>
{
throw new Exception();
}).ContinueWith(ContinuationAction);

task.Wait();

Console.ReadKey();
}

private static void ContinuationAction(Task task)
{
if (task.IsFaulted)
{
return;
}

Console.WriteLine(“Done.”);
}

ccc

ccc

Correct answer is D. We must create child task, attached to parent and TaskContinuationOption OnlyOnFaulted. Then out second task will be invoked only when parent task throws an unhandled exception.

Mario

Mario

I dont get it… What about the “second operation is invoked ONLY IF the data processing operation throws an unhandled exception”, While Task.ContinueWith() continues even if it does not throws exceptions.