```C#
myHubProxy.Invoke("foo").ContinueWith((t) => {
    // Race where more code could execute (no need)
    myHubProxy.Invoke("CallFoo");
});
```

If that race is successful these lines of code would then run: https://github.com/SignalR/SignalR/blob/ff58d30d9ff429cad6ac0a01d5e3cc1abc742f45/src/Microsoft.AspNet.SignalR.Client/Hubs/HubProxy.cs#L95-L129.  Thankfully all the task completion sources will noop when they see that the task is already canceled but there's no need for this code to run or for us to even worry about this case.  Therefore by moving the remove callback before the canceled there's less impact.