Я пытаюсь выполнить некоторые асинхронные действия в методе webservice. Скажем, у меня есть следующий вызов API: http://www.example.com/api.asmx.NET Web Service & BackgroundWorker threads
и метод называется 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?
Сон закомментирован. Я поставил это, чтобы посмотреть, могу ли я отправить электронное письмо. когда сон НЕОБХОДИЛ, то выполняется код потока рабочего фона. когда код по достоинству оценен, тогда код рабочего рабочего рабочего фона никогда не выполняется. Вместо этого попробую использовать ThreadPool. – 2008-10-23 23:14:05
> * Если у вас большие тома, тогда очередь производителей/потребителей может позволить лучше дросселировать (чтобы вы не тонули в потоках) * ooooooo !!!Я рад, что действительно поднял этот момент! метод веб-службы на самом деле большой объем! Кроме того, чтобы сделать действительно интересным, на самом деле он не отправляет электронное письмо, но на самом деле попадает на другой внешний веб-сайт (ekk, не спрашивайте) ... так что вы бы предложили мне сделать эту очередь производителей/потребителей? Если так ... это хорошая страница для ссылки? http://www.albahari.com/threading/part4.aspx (пожалуйста, прокрутите вниз по справедливому биту в код + пример). мысли? – 2008-10-23 23:33:01