Насколько я понимаю, вы не должны использовать параллельную обработку для работы в Revit через его API. Дополнительная информация доступна на http://thebuildingcoder.typepad.com/blog/2014/11/the-revit-api-is-Never-ever-thread-safe.html
Однако в настоящее время я сталкиваюсь с проблемой получения (и только получения), а затем изучения большого количества данных для принятия некоторых решений. Ниже приведен пример кода с использованием TPL, который, похоже, работает:
Parallel.ForEach<Element>(allDocumentElementsNotVisibleInCurrentView,
parallelOptions,
element =>
{
MyDerivedElement iaElement = new MyDerivedElement(uiDocument.Document, element, ElementStatusInView.Found);
// The following condition line does the real heavy lifting and can be a lengthy process, involving data extraction from Revit, such as bounding boxes, geometry and curves
if (iaElement.IsContained(iaView))
lock (result)
result.Add(iaElement);
});
Итак, мой вопрос: учитывая, что все вышеперечисленное, похоже, работает в тестах, неплохо ли позволить этому пройти параллельную обработку?
Спасибо за помощь!