public ITargetBlock<T> SkipActionBlock<T>(Func<T, Task> action, out Task completion, DataflowBlockOptions? opt = null)

{

BufferBlock<T> buf = opt is ninew();

completion = loop();

return buf;


async Task loop()

{

while (await buf.OutputAvailableAsync(token))

if (buf.TryReceiveAll(out var block))

await action(block.Last());

}

}


별도의 block클래스를 만들고 싶지만, 다른block들처럼 쓸수있도록 내부구현을 완벽히 지원할 자신이 없어서 절차속의 함수 하나로 퉁침


+20230324 캔슬도 옵션으로

ITargetBlock<T> SkipActionBlock<T>(Func<T, Task> action, out Task completion, DataflowBlockOptions? opt = null)

{

    BufferBlock<T> buf = opt switch { null => new(), _ => new(opt) };

    completion = loop();

    return buf;


    async Task loop()

    {

        while (await buf.OutputAvailableAsync())

            if (buf.TryReceiveAll(out var block))

                await action(block.Last());

    }

}