我正在尝试在Web服务方法中执行一些异步操作。假设我有以下API调用:http://www.example.com/api.asmx,并且该方法名为GetProducts()。
在这个GetProducts()方法中,我会做一些事情(例如从数据库获取数据),然后在返回结果之前,我想要执行一些异步操作(例如发送电子邮件)。
因此,这是我所做的。
在这个GetProducts()方法中,我会做一些事情(例如从数据库获取数据),然后在返回结果之前,我想要执行一些异步操作(例如发送电子邮件)。
因此,这是我所做的。
[WebMethod(Description = "Bal blah blah.")]
public IList<Product> GetProducts()
{
// Blah blah blah ..
// Get data from DB .. hi DB!
// var myData = .......
// Moar clbuttic blahs :) (yes, google for clbuttic if you don't know what that is)
// Ok .. now send me an email for no particular reason, but to prove that async stuff works.
var myObject = new MyObject();
myObject.SendDataAsync();
// Ok, now return the result.
return myData;
}
}
public class TrackingCode
{
public void SendDataAsync()
{
var backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += BackgroundWorker_DoWork;
backgroundWorker.RunWorkerAsync();
//System.Threading.Thread.Sleep(1000 * 20);
}
private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
SendEmail();
}
}
现在,当我运行这段代码时,电子邮件从未发送。如果我取消注释Thread.Sleep ..然后电子邮件就会发送。
那么...为什么后台工作线程被关闭?它是否依赖于父线程?在asp.net web应用程序中,这是我应该使用的错误方式吗?