You are implementing a method named ProcessReports that performs a long-running task. The
ProcessReports() method has the following method signature:
public void ProcessReports(List<decimal> values,CancellationTokenSource cts, CancellationToken ct)
If the calling code requests cancellation, the method must perform the following actions:
Cancel the long-running task.
Set the task status to TaskStatus.Canceled.
You need to ensure that the ProcessReports() method performs the required actions.
Which code segment should you use in the method body?
A.
if (ct.IsCancellationRequested)
return;
B.
ct.ThrowIfCancellationRequested() ;
C.
cts.Cancel();
D.
throw new AggregateException();
Shouldn’t it be C?
The ThrowIfCancellationRequested() throws an OperationCanceledException: https://docs.microsoft.com/en-us/dotnet/api/system.threading.cancellationtoken.throwifcancellationrequested?view=netframework-4.7.1#System_Threading_CancellationToken_ThrowIfCancellationRequested
which is not really a nice way to cancel the task.
Instead, cts.Cancel() will communicate a cancel request to the associated token, after which the ct.IsCancellationRequested will be set to true: https://docs.microsoft.com/en-us/dotnet/api/system.threading.cancellationtokensource.cancel?view=netframework-4.7.1#System_Threading_CancellationTokenSource_Cancel
correct ans ct.ThrowIfCancellationRequested();