It seems reasonable as a feature (though please include your "weird
error messages")... to add two things to consider.
First running out of memory is not really something that will happen
quickly. Assuming you are writing 1000 events/second at 1k each it
would take roughly 15 minutes to use a gb of memory. Even if I make
this 30k/second is still 30 seconds. In a modern application going to
2-3 minutes here is not ridiculous.
Second and related to the first. Your code is calling
AppendToStreamAsync and knows how many outstanding operations there
are at any given point. Your code could just limit how many
outstanding appendtostreamasync operations there currently are from
the outside. Hopefully your code would realize within a minutes
timeframe that none of your async calls are returning?