Хороший совет - просто не надо: -) EF едва удается выжить в одной нити - природе зверя.
Если вам абсолютно необходимо его использовать, сделайте самые легкие DTO-ы, закройте OC, как только у вас будут данные, перепакуйте данные, порождайте ваши потоки просто для выполнения вычислений и ничего больше, дождитесь их завершения, затем создайте другой OC и сбросить данные обратно в БД, согласовать их и т. д.
Если другой «основной» поток (тот, который порождает N потоков вычислений через TPL) должен знать, когда какой-то поток завершается, запускается событие, просто установите флаг в другом потоке, а затем позвольте его коду проверить флаг в своем Зацикливайтесь и реагируйте, создавая новый OC, а затем сверяйте данные, если это необходимо.
Если ваша ситуация более проста, вы можете адаптировать ее - ключ в том, что вы можете только установить флаг и позволить другому потоку реагировать, когда он будет готов. Это означает, что он находится в стабильном состоянии, завершил раунд того, что он делал, и может делать вещи, не рискуя условиями гонки. Сбросьте флаг (целое число) с помощью взаимосвязанных операций и сохраните некоторые временные данные, чтобы убедиться, что ваши потоки не реагируют снова в течение некоторого времени T - в противном случае они могут потратить свою жизнь, просто запрашивая БД.