Exemplo n.º 1
0
        // s の Dispose 債務はこっち側にあるのか、呼び出し元にあるのかが不明
        static async Task RunSubTask(SampleReferenceCount s, TimeSpan delayTime)
        {
            await Task.Delay(delayTime);

            // 値渡しで s を受け取ってるので、Release義務が発生
            // Releaseしないとコンパイルエラーになるべき(要Analyzer)
            s.Release();
        }
Exemplo n.º 2
0
        private static async Task RunTask(Counter counter, Random r)
        {
            var s = new SampleReferenceCount(counter).Init();

            await Task.WhenAll(
                RunSubTask(s.Share(), r.Time()),
                RunSubTask(s.Share(), r.Time()),
                RunSubTask(s.Share(), r.Time()),
                RunSubTask(s.Share(), r.Time()),
                RunSubTask(s.Share(), r.Time()),
                RunSubTask(s.Move(), r.Time())); // 1個Moveしたので、もう親側にRelease義務なし
        }