public Semaphore() { Join join = Join.Create(); join.Initialize(out Signal); join.Initialize(out Wait); join.When(Wait).And(Signal).Do(delegate { }); }