我有一个可以分为两个主要部分的Web服务:
[WebMethod]
MyServiceCall()
{
//Do stuff the client cares about
//Do stuff I care about
}
我想做的是在另一个线程上运行第二部分,以便客户端不等待它:一旦用户的逻辑完成,立即向他们发送信息,但继续处理我关心的东西关于(记录等)。
从Web服务中,建议的异步运行第二部分的方法是什么,以便让用户尽快回复他们的信息? BackgroundWorker
? QueueUserWorkItem
?
答案 0 :(得分:4)
您可能需要查看.NET 4.0新手的Tasks。
它可以让您启动异步操作,但也可以让您轻松查看以后是否完成。
var task = Task.Factory.StartNew(() => DoSomeWork());
它将启动DoSomeWork()并继续而不等待,以便您可以继续进行其他处理。当您到异步任务完成之前不再需要处理的时候,可以调用:
task.Wait();
哪个会等到任务完成。如果要从任务中获取结果,可以执行以下操作:
var task = Task.Factory.StartNew(() =>
{
Thread.Sleep(3000);
return "dummy value";
});
Console.WriteLine(task.Result);
调用task.Result阻塞,直到结果可用。
这是一个更详细地介绍任务的教程:http://www.codethinked.com/net-40-and-systemthreadingtasks
答案 1 :(得分:1)
启动新线程的最简单方法可能是:
new Thread(() =>
{
/// do whatever you want here
}).Start();
但要小心 - 如果服务频繁受到攻击,你最终可能会创建大量相互阻塞的线程。