Added cancellation of LR execution functionality

@lukechurch
Hi @aparajit-pratap, such does not match the "Rule of Selfishness". The "CancelExecution" is a "public" property, any code can alter its value at anytime regardless of what its current state is. Please make this a class data member instead:

"cs
bool cancellationPending = false;
"

Then add a public method to request for the execution to be canceled. This method accomplishes an important task: it ensures that the cancellation is done exactly once, so if we have a caller which requests multiple cancellations (due to some bad logic), then it will be immediately caught.

"cs
public void RequestCancellation()
{
    if (this.cancellationPending) {
        var message = "Cancellation cannot be requested twice";
        throw new InvalidOperationException(message);
    }

    this.cancellationPending = true;
}