我有一个Web服务,可以分为两个主要部分:
[WebMethod]
MyServiceCall()
{
//Do stuff the client cares about
//Do stuff I care about
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是在另一个线程上运行第二部分,以便客户端不等待它:一旦用户的逻辑完成,立即发送他们的信息,但继续处理我关心的东西(记录等).
从Web服务,以异步方式运行第二部分的推荐方法是什么,以便尽快让用户返回信息? BackgroundWorker? QueueUserWorkItem?
您可能想要研究.NET 4.0 的新增任务。
它允许您启动异步操作,而且还为您提供了一种简单的方法来查看它是否已完成。
var task = Task.Factory.StartNew(() => DoSomeWork());
Run Code Online (Sandbox Code Playgroud)
它将启动 DoSomeWork() 并继续而不等待,以便您可以继续进行其他处理。当您不想再处理直到异步任务完成时,您可以调用:
task.Wait();
Run Code Online (Sandbox Code Playgroud)
它将在那里等待,直到任务完成。如果你想从任务中获取结果,你可以这样做:
var task = Task.Factory.StartNew(() =>
{
Thread.Sleep(3000);
return "dummy value";
});
Console.WriteLine(task.Result);
Run Code Online (Sandbox Code Playgroud)
对 task.Result 的调用会阻塞,直到结果可用。
以下教程更详细地介绍了任务:http ://www.codethinked.com/net-40-and-systemthreadingtasks
| 归档时间: |
|
| 查看次数: |
612 次 |
| 最近记录: |