If you want multiple threads to write to a single IndexWriter then I would just spawn one thread which does something like
Parallel.ForEach(docs, d => { writer.Add(d,analyzer) });
So that .NET deals with splitting up the data.
At large index sizes, some people find performance improvements in having multiple indexes that they write to and then merge all the indexes together. My understanding is that this is really useful only for truly massive indexes, but if you want to do this then you will probably need to deal with splitting up the data yourself. In that case using a more full-featured library like tpl might be useful.
Solr is inherently multi-threaded, so you would do the exact same snippet as I gave you before, except instead of calling the writer directly you would call your REST/SolrNet method.
As a general rule, if you ask "Should I use Solr or make it myself?" the answer is almost always "use Solr". I can't think of any reason that you would want to make it yourself here, unless your jvm is really bad or you really hate java.