I am working on a class library that logs audit details of a web application in several types of datasources(file, xml, database) based on policies defined in the web configuration file.

My Audit log method has a signature similar to this:
public static void LogInfo(User user, Module module, List lst);

Web application uses this method to log important pieces of details like warnings, error and even exception details.

Since in a single workflow, there are more than 700+ calls to these methods , I thought of making them asynchronous. I used simple method from ***ThreadPool*** class called ***QueueUserWorkItem*** 

```
ThreadPool.QueueUserWorkItem(o => LogInfo(User user, Module module, List<Object> lst) );

```

but this does not ensure the order in which work item was queued to it. Even though all my information was logged but entire ordering was messed up. In my text file my logs were not in the order in which they were called.

Is there a way I can control the ordering of the threads being called using QueueUserWorkItem?