Ответ 1
Я предполагаю, что это ошибка в TensorflowSharp.
Ошибка выглядит как обычно несогласованное нарушение доступа в коде CLR (обычно это происходит только при большой нагрузке или при случайном числе попыток). Цитирование из Microsoft docs:
Управляемый помощник отладки
callbackOnCollectedDelegate
(MDA) активируется, если делегат переводится с управляемого на неуправляемый код, как указатель функции и обратный вызов помещаются на этот указатель функции после того, как делегат был собран мусором.
Этот тип ошибки возникает, когда делегат, из которого был создан указатель функции и подвергается неуправляемому коду, был собран мусором. Когда неуправляемый компонент пытается вызвать указатель на функцию, он генерирует нарушение доступа. Ошибка возникает случайным образом, поскольку она зависит от того, когда происходит сбор мусора.
Разрешение может быть затруднено, поскольку после делегирования делегата как неуправляемого указателя функции сборщик мусора не может отслеживать его срок службы. Вместо этого требуется сохранить ссылку на делегат на время жизни неуправляемого указателя функции. Чтобы это сделать, ошибочный делегат, который был собран, должен быть идентифицирован в коде TensorFlowShapr (или вашем коде).
Вы также можете включить gcUnmanagedToManaged MDA, чтобы заставить мусор перед каждым обратным вызовом во время выполнения. Это приведет к удалению неопределенность, введенная сбором мусора, путем обеспечения того, чтобы сборка мусора всегда возникает перед обратным вызовом. Как только вы знаете какой делегат был собран, измените свой код, чтобы сохранить ссылку на что делегат на управляемой стороне в течение всей жизни маршалин неуправляемый указатель функции.
Итак, я думаю, лучше сообщить об этом создателю библиотеки.