الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Asp.net Scheduler

بدأه AhmedElbaz في 7 أغسطس 2008 · 9 رد · 1,118 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

في البداية نقوم بانشاء دالة تحتوي الكود المطلوب تنفيذه ثم الفترة التي يتم التنفيذ بعدها بشكل دوري

 public static void CodeAndTimer()
	{
		while (true)
		{
			try
			{
				// write your job

			}
			catch { }
			finally
			{
				/// every day
				System.Threading.Thread.Sleep(60 * 1000);
			}
		}
	}

و بعد ذلك انشاء دالة لتشيغل ال Thread و اخري لوقفه

  private static System.Threading.Thread _Thread = null;

	public static void StartThread()
	{
		System.Threading.ThreadStart myThreadStart = new System.Threading.ThreadStart(CodeAndTimer);
		_Thread = new System.Threading.Thread(myThreadStart);
		_Thread.Start();
	}

	public static void StopThread()
	{
		if (null != _Thread)
		{
			_Thread.Abort();
		}
	}

ثم استدعاء دالة StartThread في ال Application_Start في ملف Global.asax

و ايضا StopThread في ال Application_End

  void Application_Start(object sender, EventArgs e) 
	{
		StartThread();
	}


	void Application_End(object sender, EventArgs e) 
	{
		StopThread();
	}

يمكنك عمل كلاسات و تنظيم الموضوع اكتر من كده

و ممكن تضيف اكتر من job في نفس ال thread عن طريق تعديل بسيط

مجرد فكرة و ان كانت ليست الافضل و لكنها تؤدي الغرض

بالتوفيق

#2

جزاك الله أخي الحبيب .. وإن كنت اظن الأفضل استخدام ThreadPool حتى يضبطها الـ ASP.NET تلقائياً ... ولا تحتاج حينها لغلقه ...

ASP.NET Team Leader

moh_kin_mah@hotmail.com

--------------------------------

لو أعجبك أي من مشاركاتي ... برجاء قم بتقييم المشاركة عبر الأزرار الموجودة أسفل يسار كل مشاركة

#3

كلام جميل

#4
moh_kin كتب:
جزاك الله أخي الحبيب .. وإن كنت اظن الأفضل استخدام ThreadPool حتى يضبطها الـ ASP.NET تلقائياً ... ولا تحتاج حينها لغلقه ...

ممكن تشرح الطريقة اللي تستخدمها

وشكرا لكم

#5
//calling in Application_Start in Global.asax
System.Threading.ThreadPool.QueueUserWorkItem(method1);

void method1(object obj)
{
	 while (true)
		  {
			   //code to execute then:

			   System.Threading.Thread.Sleep(300000); //5 minutes = 300000 millisecondes
		   }
}

تم تعديل هذه المشاركة بواسطة moh_kin في 16 أغسطس 2008 في 09:08

ASP.NET Team Leader

moh_kin_mah@hotmail.com

--------------------------------

لو أعجبك أي من مشاركاتي ... برجاء قم بتقييم المشاركة عبر الأزرار الموجودة أسفل يسار كل مشاركة

#6

علي العموم السرفر ممكن ينهي ال thread في حالة الحاجة لل resources

و هذه اهم مشكلة مع استخدام ال thread في عمل scheduler هي افضل طريقة توصلت اليها

و فيه طريقه اخري باستخدام ال caching expiration callback بس فيها مشكلة ايضا

#7

بس أخي أحمد هل السيرفر بينهي Threads اللي انت أنشأتها بيدك ؟؟ لأني أعرف إن اللي انت بتفتحها إنت بس اللي تقدر تنهيها .. وده تحذير من استعمالها عشان كده ThreadPool أفضل .. فهل أنت متأكد إنه بيتخلص منها لوحده عند الحاجة؟؟

وع العموم برضه كلامنا حتى هذه اللحظة منصب على عمل scheduler من داخل ASP.NET .. لكن عملياً الأفضل إننا نعمل scheduler من خارج ASP.NET زي مثلاً Windows scheduler أو باستخدام أي سيرفس تانية من داخل النظام على السيرفر ... أو باستخدام exe file مبرمج وبه timer ويتعمل له run من داخل السيرفر ...

ASP.NET Team Leader

moh_kin_mah@hotmail.com

--------------------------------

لو أعجبك أي من مشاركاتي ... برجاء قم بتقييم المشاركة عبر الأزرار الموجودة أسفل يسار كل مشاركة

#8
اقتباس
Windows scheduler

كلام جميل

بس في حالة ال shared servers ممكن يكون صعب انك تعمل windows task فاكيد الحل هيكون من ال asp.net

اقتباس
بس أخي أحمد هل السيرفر بينهي Threads اللي انت أنشأتها بيدك ؟؟ لأني أعرف إن اللي انت بتفتحها إنت بس اللي تقدر تنهيها .. وده تحذير من استعمالها عشان كده ThreadPool أفضل .. فهل أنت متأكد إنه بيتخلص منها لوحده عند الحاجة؟؟

حسب معلوماتي ان السرفر في حالة الحاجة لموارد ممكن ينهي ال thread

بس عموما يوجد مشاكل اخري في هذة الطريقة

#9

أظن حتى تتأكد إن السيرفر لن يغلق لك Thread أن ترفع له Periority .. وبذلك سيغلق السيرفر Threads أخرى وسيترك الخاصة بك ..

ASP.NET Team Leader

moh_kin_mah@hotmail.com

--------------------------------

لو أعجبك أي من مشاركاتي ... برجاء قم بتقييم المشاركة عبر الأزرار الموجودة أسفل يسار كل مشاركة

#10

طريقة أخرى بإستخدام Timer بدون Thread فى /index.ph...st&p=966986

مواضيع مشابهة