I had breakfast with Martin M. yesterday, and told him a bit about my struggles with the async generator/task system. Radian’s generators, like many aspects of the language, are directly inspired by Python equivalents, and it so happens that Martin was the one who implemented generators in IronPython. His design went on to inform the implementation of async blocks in VB and C#, and watching asynchronous generators work in multiple languages is part of what convinced me it is a robust enough model to support the entire Radian I/O API.
We didn’t get deep into detail, but the conversation confirmed a growing suspicion that I’ve been doing it wrong and need to start over. Oh, well – sometimes you get it right, and sometimes you really just don’t. The parallelization scheme came together almost perfectly, almost right away, and works exactly the way I’d thought it would – but with the asynchronous generators project it appears I’ve burned almost half a year getting mostly nowhere. At least it should go more quickly this time, since the problem grows increasingly familiar with each attempt.