View Full Version : حرفه ای: اجرای تابعی زمان گیر در سرور بدون معطل شدن کاربر
gigil_Question
دوشنبه 12 مهر 1389, 07:46 صبح
سلام
من در قسمت مدیریت برنامه به کاربر امکان upload فایل میدم که این فایل یه فایل متنی با حجم زیاده (تا 1 گیگ!!!)
بعد از اینکه upload تموم شد باید یه پردازش سنگین که حدود 20 دقیقه طول میکشه روی فایل انجام بشه(کاربر با نتیجه پردازش کاری نداره و نتیجه توی بانک ذخیره میشه).
حالا من چه جوری میتونم کاری بکنم که وقتی فایل به طور کامل upload شد کاربر منتظر پردازش فایل نشه و سیستم خودکار این تابع رو اجرا کنه و کاربر به کارهای دیگه برسه ؟
PhoenixNet
دوشنبه 12 مهر 1389, 09:46 صبح
سلام
بعد از اینکه بارگذاری تمام شد
Response.End()
رو اجرا کن.با این تابع دیگه کاربر منتظر نمی مونه.بعد میتونی عملیات خودتو بنویسی.
gigil_Question
چهارشنبه 14 مهر 1389, 08:22 صبح
سلام
این راه حل جواب میده ولی یه مشکل داره
بافر response به کلاینت ارسال نمیشه و محتویات فرم از بین میره
برای مثال این کد رو در نظر بگیر :
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write("ok");
Response.End();
System.Threading.Thread.Sleep(30000);
Response.Write("qqqq");
}
بعد از کلیک روی button دیگه ok چاپ میشه و برای sleep منتظر نمیشه
ولی باقی فرم از بین میره
راه حلش چیه ؟:متفکر:
raziee
چهارشنبه 14 مهر 1389, 11:08 صبح
Response.End();
این دستور مشخص میکنه که کار ارسال تمام شده. طبیعی هست که دیگه نتونید بعد از این دستور چیزی رو بنویسید.
حالا من چه جوری میتونم کاری بکنم که وقتی فایل به طور کامل upload شد کاربر منتظر پردازش فایل نشه و سیستم خودکار این تابع رو اجرا کنه و کاربر به کارهای دیگه برسه ؟
از Thread استفاده کنید.
بعد از Upload پردازش رو در یک Thread بنویسید و اون Thread رو start کنید.
PhoenixNet
چهارشنبه 14 مهر 1389, 14:47 عصر
اگه بعد دوباره می خوای پاسخ ارسال بشه
Response.Flush()
استفاده کنید که پاسخ تا این لحظه رو برای کاربر ارسال میکنه.
gigil_Question
چهارشنبه 14 مهر 1389, 17:26 عصر
سلام
اگه بعد دوباره می خوای پاسخ ارسال بشه
Response.Flush()
استفاده کنید که پاسخ تا این لحظه رو برای کاربر ارسال میکنه.
فرقی نکرد
از Thread استفاده کنید.
بعد از Upload پردازش رو در یک Thread بنویسید و اون Thread رو start کنید.
اگر ممکنه یه لینک در این رابطه معرفی کنید
ممنون
masih_enter
پنج شنبه 15 مهر 1389, 12:40 عصر
من هم همین مشکل رو با بانک دارم و یه سری دستورات زمان بر رو سرور اجرا میشه و به کاربر اکثرش ربطی نداره . اگر دوستان کمک کنند ممنون میشم
آیا امکانش هست اون Thread جواب هم داشته باشه ؟ مثلا صفحه که لودش تمام شد مثل یه لودینگ بشه کارایی که رو یرور انجام میشه هر مرحله که تمام شد یه مقداری لودینگ بره جلوتر
اگر به سوال این دوستمون جواب بدید فکر کنم مشکل من هم برطرف بشه .
با تشکر
raziee
پنج شنبه 15 مهر 1389, 15:24 عصر
اگر ممکنه یه لینک در این رابطه معرفی کنید
using System.Threading;
Thread thread = new Thread(new ThreadStart(WorkThreadFunction));
thread.Start();
public void WorkThreadFunction()
{
try
{
// do any background work
}
catch (Exception ex)
{
// log errors
}
}
لینک منبع (http://www.csharp-examples.net/create-new-thread/)
این (http://msdn.microsoft.com/en-us/library/aa645740%28VS.71%29.aspx) و این (http://msdn.microsoft.com/en-us/library/798axes2.aspx)رو هم ببینید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.