I have a web service that can be broken down into two main sections:
[WebMethod]
MyServiceCall()
{
//Do stuff the client cares about
//Do stuff I care about
}
What I’d like to do is run that 2nd part on another thread, so that the client isn’t waiting on it: once the user’s logic has completed, send them their information immediately, but continue processing the stuff I care about (logging, etc).
From a web service, what is the recommended way of running that 2nd piece asynchronously, to get the user back their information as quickly as possible? BackgroundWorker? QueueUserWorkItem?
You may want to look into Tasks which are new to .NET 4.0.
It lets you kick off an asynchronous operation, but also gives you an easy way to see if it’s done or not later.
It’ll kick off DoSomeWork() and continue without waiting so you can continue doing your other processing. When you get to the point where you don’t want to process anymore until your asynchronous task has finished, you can call:
Which will wait there until the task has completed. If you want to get a result back from the task, you can do this:
A call to task.Result blocks until the result is available.
Here’s a tutorial that covers Tasks in greater detail: http://www.codethinked.com/net-40-and-systemthreadingtasks