Tips on my multi-threading intuition?
Let the framework do multithreading for you:

List&lt;string&gt; tasks = new List&lt;string&gt;();
foreach (string value in db.table.select(a =&gt; a.value))
{
    tasks.Add(Task.Factory.StartNew(() =&gt; CreateNewDocumentAppendValueAndSave(value)));
}
Task.WaitAll(tasks.ToArray());


Where Task is System.Threading.Tasks.Task.