Seems like TaskMutex/TaskCondition is broken.

import vibe.d;

shared static this() {
  bool flag = false;
  TaskCondition cv = new TaskCondition(new TaskMutex);
  runTask({
    synchronized(cv.mutex) {
      while(!flag) cv.wait();
    }
    logInfo("notified");
  });
  runTask({
    synchronized(cv.mutex) {
      flag = true;
      cv.notify();
    }
    logInfo("notify");
  });
}

outputs

notify