Some operators interact with external APIs that are blocking until data is available. In our pipeline abstraction, this may cause events not to be delivered.
There are generally three ways to solve this:
Allow operators to properly await a blocking action without needing to offload that onto another thread by making our operators async generators internally.
Put execution of detached operators into its own thread to decouple the potentially blocking execution from the delivery of queued previous results.
Let detached operators send partial results out eagerly rather than waiting until the downstream demand is met or the demand's timeout expired. This is a performance pessimization for all detached operators.
### Definition of Done
- [x] Agree on the approach to take
- [x] Implement the required changes
Some operators interact with external APIs that are blocking until data is available. In our pipeline abstraction, this may cause events not to be delivered.
There are generally three ways to solve this: