Polyphonic C#でのchordの順序はない。

asyncメソッドは非同期で順番は未定義であり、そこからトリガーされるchordメソッドでもasync部は非同期で順序未定義である。

public class AsyncBuffer {
  public async In1(string s);
  public async In2(string s);
  public string Out1() & In1(string s) {
    return s;
  } & In2(string s) {
    return s + s;
  }
  public string Out2() & In1(string s) {
    return s + s + s;
  } & In2(string s) {
    return s + s + s + s;
  }
  
  public static void Main() {
    AsyncBuffer buffer = new AsyncBuffer();
    buffer.In1("a");
    buffer.In2("b");
    buffer.In2("c");
    buffer.In1("d");
    System.Console.WriteLine("1st: " + buffer.Out1());
    System.Console.WriteLine("2nd: " + buffer.Out2());
    System.Console.WriteLine("3rd: " + buffer.Out1());
    System.Console.WriteLine("4th: " + buffer.Out2());
    // 以降は待ち状態
    //System.Console.WriteLine("5th: " + buffer.Out2());
  }
}

このコードの場合、In1やIn2で入れたすべてがOut1、Out2にかかわらず1回づつ出ることは保障するけど、どの順番で出るかは同じメソッドであっても保障しない(実装上は毎回同じ順に出るようになってしまうが)。