2
Avoid calling unknown code while holding a lock… or from an active object’s method.
•This isn’t as drastic as it sounds, because of active lambdas.
Just queue up another work item:
• active ref class Shape {
  int x, y; // this object’s coordinates
  …
public:
  void AddMyselfTo( SyncHashTable^ h ) {
    … do work …
•     // If we call “h->Add(this,42);” synchronously, it will probably
    // cause a cycle back to “this” (for GetHashCode). Instead:
    return active{ h->Add(this->wait(),42) }; // queue up a work item
  }
};
Prevent Blocking Cycles
if there’s no hcp (hash code provider), we call this->GetHashCode

experimenting with this->wait(), instead of a (Shape^) cast to remove “active”
todo: explore
  a) casting to non-active and automatically blocking on futures (even if we mark all out params and no out params or return values are being used, there could be side effects, so if it doesn’t say “active” we should block on the whole call)
  b) adding active overloads throughout FX to avoid this kind of cast)