Using systems such as Parallel Linq, it's possible to split up execution of anonymous functions, queries, etc across multiple cores and threads within a single machine. I'd like the ability to extend this to run across multiple machines using standard language constructs such as for loops (like Parallel.For()
), value types like int
s, struct
s, etc., and keep the application source modifications to a minimum. Ideally, this would allow me to open a project, add an attribute to a method, and recompile to gain access to the enhanced functionality.
It seems that I'd need something along the lines of:
The ability to capture a compiled block of code (such as a lambda) and pass it to a worker process running on another node, along with any data that is required, or
Provide a preprocessor that would capture the code in question, compile it in a sort of template project that would replace variable references, etc, with references to a class that would handle network communication, caching and access to any other required assets, and send the resulting DLL to any available worker nodes running on other machines.
Roslyn appears to provide some tools that would be useful here. Is there way to hook into the current compilation pipeline to allow this?
Edit
Okay, I know this is possible, because these guys did it. The question is, how?
var isTooLocalized = Math.Pow(obscureTechCount, 2) > 16; if (isTooLocalized) { VoteToClose(); }
– Compound