private static async Task RunTask(Counter counter, Random r) { var s = new SampleDisopsableStruct(counter); await Task.WhenAll( RunSubTask(s, r.Time()), RunSubTask(s, r.Time()), RunSubTask(s, r.Time()), RunSubTask(s, r.Time()), RunSubTask(s, r.Time()), RunSubTask(s, r.Time())); // 「子タスクの誰かが Dispose 呼ぶんじゃないかなぁ」みたいな「にらめっこ」の結果、Dispose が呼ばれてないとする }
// s の Dispose 債務はこっち側にあるのか、呼び出し元にあるのかが不明 static async Task RunSubTask(SampleDisopsableStruct s, TimeSpan delayTime) { await Task.Delay(delayTime); // この例の場合は呼び出し元側でちゃんと管理していると思っているので、Dispose は呼ばない }