اجرای یک Thread پس از اتمام Thread دیگر
فرض کنید 3 نخ(Thread) داریم که با هم شروع بکار میکنند اما میخوایم Thread سوم پس از اتمام دو Thread اول شروع به کار کنه. بنظر شما برای انجامش از چه تکنیکی میشه استفاده کرد؟!
ThreadPool؟ Semaphore؟ AutoResetEvents؟! برای پاسخش مجبور شدم دوباره همه این ها رو مطالعه کنم تا ببینم به کارم میان یا نه!
اما پاسخ خیلی راحت تر بود! استفاده از متد Join در Thread:
Thread t1, t2, t3; int data1, data2; void Main() { t1 = new Thread(() => { //do some stuffs... //sleep the thread for 3 seconds Thread.Sleep(3000); data1 = 10; }); t2 = new Thread(() => { //do some stuffs... Thread.Sleep(2000); data2 = 20; }); t3 = new Thread(() => { t1.Join(); //t3 will wait in this line until t1 done. t2.Join(); //t3 will wait in this line until t2 done. //now do stuffs in t3: Console.WriteLine("result:" + (data1 * data2)); //prints "result:200" in output }); t1.Start(); t2.Start(); t3.Start(); }
متد Join باعث میشه نخ جاری تا زمانی که نخی که متد Join اون صدا زده شده به اتمام نرسیده متوقف بشه. بعبارت ساده تر، t3 در خط t1.Join منتظر میمونه تا اجرای t1 به اتمام برسه بعد به خط بعد میره (t2.Join) و در انتها زمانی که اجرای t2 تموم شد، t3 به کار خودش ادامه میده (در اینجا چاپ خروجی)
Vеry goοd info. Lucky me I discovered үour blog by accident (stumbleupon).
I have book marked it for later!
با تشکر از شما بابت قرار دادن این کد ، چون هنگام افزودن دیتا به دیتابیس و یا ایجاد آن نرم افزار freeze می شد که با این کد درست شد . این هم کد برنامه
Thread t = new Thread(InsertToDataBase);
t.IsBackground = true;
Thread t2 = new Thread(() =>
{
t.Join();
MessageBox.Show(“ok”);
});
t.Start();
t2.Start();
اگر میشه از تکنیک های برنامه نویسی موازی و چندنخی درس های بیشتری قرار دهید – ممنون.
سلام دوست عزیز… در حال آماده سازی این بخش هم هستم ولی ممکنه یه کم طول بکشه
بسیار ممنون از پست مفیدتون