Executing an SQL command on a number of files
if (fileList != null)



You can reduce nesting (which is usually a good thing) by turning this into

  if (fileList == null) { return; }


The same applies to


if (File.Exists(file))



It's better to have

if (!File.Exists(file)) { continue; }


But even better then this would be to filter the list before you start processing it:

fileList.Where(File.Exists)


Checking the fileList for null is an indicator that some other part of the code might be implemented in a wrong way_. In C# we prefer to have an empty list rather then a null.

Parallel.ForEach

Have you already tried the Parallel.ForEach? It would greatly simplify your code:

Parallel.ForEach(fileList.Where(File.Exists), fileName =&gt; 
{
    // process the file
});


This method has a lot of overloads so you'll probably find something that suits your needs.

With one of them you could for example create a connection for each parallel loop and dispose it at the end of the processing.

Here's a bigger example that might work for you. This will use the same connection for several files.

try
{
    var parallelOptions = new ParallelOptions
    {
#if DEBUG
        MaxDegreeOfParallelism = 1
#else
        MaxDegreeOfParallelism = Environment.ProcessorCount
#endif
    };

    var parallelLoopResult = Parallel.ForEach
    (
        source: fileList.Where(File.Exists),
        parallelOptions: parallelOptions,
        localInit: () =&gt; new
        {
            Connection = /* init the oracle connection*/                
        },
        body: (fileName, loopState, i, local) =&gt;
        {
            // process the file
            // use the local.Connection
            return local; // pass the connection to the next loop
        },
        localFinally: local =&gt;
        {
            local.Connection.Dispose();             
        }
    );
}
catch (AggregateException ex)
{
    // handle exceptions
}


See this question on SO, it compares your solution with Parallel.ForEach:


Parallel.ForEach vs Task.Factory.StartNew