PDA

View Full Version : سوال: asynchronous and multi threading



m_ali_gho
جمعه 25 مرداد 1392, 06:16 صبح
سلام بر همه دوستان. صبح همگی بخیر. :چشمک:
من یه برنامه کنسولی دارم که داره از چند تا thread استفاده می کنه. و هر کدوم از این thread ها در جایی یه سری اعمالی از جمله update و insert و select روی دیتابیس انجام میدن. مشکل اینجا ب وجود میاد که نخ ها تو کار همدیگه تداخل ایجاد می کنن. یعنی مثلا یکی connection رو باز کرده و می خواد اطلاعات ذخیره کنه اما اون یکی تو همین لحظه کارش تموم میشه و می خواد connection رو ببده. شاید بگین اول برنامه کانکشن رو باز کن و آخر برنامه هم ببندش. این کار رو کردم اما بازم نشد و همون مشکل را دارم. از IASuncResult هم به صورت زیر استفاده کردم:
IAsyncResult r1 = cmd1.BeginExecuteNonQuery();
while (!r1.IsCompleted)
{
Console.WriteLine("waiting to execute");
Thread.Sleep(100);
}
بازم جواب نداد. و یه مشکل دیگه ایجاد کرد برام که وقتی Select دارم و می خوام از SqlDataAdapter و DataTable استفاده بکنم اصلا چنین دستوری که برابر با IASyncResult قرار بدم انگار وجود نداره یا اینکه من ازش اطلاعی ندارم. سوالم اینه که چیزی وجود داره که بتونم یه سری دستورات رو داخلش قرار بدم و یه شرط بزارم و تا وقتی که شرط برقرار نشده thread جاری رو به sleep ببره و اون کار رو انجام نده و به محض برقراری شرط بقیه نخ ها رو هم معلق کنه و دستورات رو انجامشون بده و در نهایت همه نخ ها رو resume کنه. AsyncCallback رو که میخواین تعریف کنین یه آرگومان میخواد که به صورت void (IAsyncResult) target هستش. معنی این آرگومان چیه؟ AsyncCallBack چی هستش اصلا؟ چی کار میکنه؟ تو این موضوع بدردم میخوره؟ اگه چیز دیگه هم به ذهنتون میرسه برای حل این مشکل خیلی ممنون میشم که راه حلتونو بگید.

parvizwpf
جمعه 25 مرداد 1392, 09:50 صبح
http://www.c-sharpcorner.com/UploadFile/gustavoperezv/AdoNetConcurrency09032005075352AM/AdoNetConcurrency.aspx

m_ali_gho
شنبه 26 مرداد 1392, 00:01 صبح
با مانیتور کردن هم مشکل حل نشد. کسی نظر دیگه نداره؟