Allora forse mi sa che la soluzione migliore è effettivamente avere un bufferone in cui tenere i dati in arrivo (magari una lista di stringhe, una per ogni "chunk" ricevuto), e scrivere tutto alla fine tenendo il lock sul file per il minor tempo possibile, prevedendo magari uno "sfogo" su un file temporaneo quando le dimensioni della lista iniziano a diventare eccessive (ma a meno che non ti arrivino "messaggi" da centinaia di MB credo sia un'inutile complicazione).