Вероятно, компонент ActiveX бомбит, возвращая E_OUTOFMEMORY.Который переводится в ООМ.Проблема заключается в том, что у вас есть несколько экземпляров этого компонента, когда вы выполняете этот код асинхронно.Для файла PDF объемом 50 МБ потребуется куча неуправляемой памяти, вероятно, несколько сотен мегабайт.
Вызов GC.Collect () работает случайно.Это освобождает ваши массивы fileBytes.Они довольно большие и помещаются в кучу больших объектов.Требуется полный сборщик мусора, чтобы освободить их.То, что делает ваш вызов Collect (), дает компоненту ActiveX некоторое пространство для кражи неуправляемой памяти из диспетчера кучи Windows.
Здесь вы просто нарушаете фундаментальные ограничения памяти 32-битного процесса.Вам нужно будет по крайней мере ограничить количество экземпляров этого компонента, чтобы они не поглотили слишком много памяти.В любом случае многопоточность редко работает с компонентами ActiveX, COM выполняет их вызовы в поток STA.