Реализация расширений языка C#

Используя такие системы, как Parallel Linq, можно разделить выполнение анонимных функций, запросов и т.д. по нескольким ядрам и потокам на одной машине. Я хотел бы иметь возможность расширить эту возможность для выполнения на нескольких машинах, используя стандартные конструкции языка, такие как циклы for (например, Parallel.For()), типы значений, такие как ints, structs и т.д., и свести к минимуму модификации исходного кода приложения. В идеале это позволило бы мне открыть проект, добавить атрибут к методу и перекомпилировать его, чтобы получить доступ к расширенной функциональности.

Кажется, что мне нужно что-то вроде:

  1. Возможность захватить скомпилированный блок кода (например, лямбду) и передать его рабочему процессу, запущенному на другом узле, вместе с любыми необходимыми данными, или

  2. Предоставить препроцессор, который захватит код, скомпилирует его в своего рода шаблонный проект, который заменит ссылки на переменные и т.д. ссылками на класс, который будет обрабатывать сетевое взаимодействие, кэширование и доступ к любым другим необходимым активам, и отправит полученную DLL на все доступные рабочие узлы, запущенные на других машинах.

Roslyn, похоже, предоставляет некоторые инструменты, которые были бы полезны здесь. Есть ли способ подключиться к текущему конвейеру компиляции, чтобы сделать это?

Редактировать

Хорошо, я знаю, что это возможно, потому что эти ребята сделали это. Вопрос в том, как?

16
задан Anthony Pegram 28 December 2011 в 19:49
поделиться