The current implementation for producer provides one big function for loading the data from source and for parsing this data.
This is causing problems and complexity to the producer loop because we are using this function inside a select! macro, forcing the whole implementation to be cancel safe.
The proposed change is to split those functions into two functions fetch and process, where fetch function will be used on the left side of the select macro and the process function on the right side of the macro where it mustn't be cancel safe.