اجرای همزمان دو task در کنسول سی شارپ
سلام وقت بخیر دوستان
یه برنامه دارم که مدام از اینترنت داده میخونه و وقتی اینترنت قطع میشه تو حلقه ای که داره درخواست خوندن میکنه تو حلقه گیر مینه.خطایی هم رخ نمیده فقط گیر میکنه تا داده رو بخونه و وقتی نت وصل میشه دیگه دریافت نمیکنه و تو اون حالت میمونه.
خب منم اومدم یه قطعه کد برای بررسی وجود اینترنت نوشتم و تو شروع برنامه چک میکنه اگه نت نبود برنامه رو ریستارت میکنم. برای اینکه این دوتا تابع بصورت همزمان اجرا بشن من دستورات زیر رو نوشتم تا وقتی نت قطع شد برنامه رو ریستارت کنه.اما بازم وقتی نت قطع میشه تو حلقه گیر میکنه و این بررسی نت اجرا نمیشه. ممنون میشم بگید اشکال کارم کجاست:افسرده:
static void Main(string[] args)
{
MainAsync().Wait();
}
static async Task MainAsync()
{
Task.Run(() => CheckNet());
Task.Run(() => Runwo());
Console.ReadLine();
}
//check internet
public static bool PingTest()
{
System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping();
System.Net.NetworkInformation.PingReply pingStatus =
ping.Send(IPAddress.Parse("208.69.34.231"), 1000);
if (pingStatus.Status == System.Net.NetworkInformation.IPStatus.Success)
{
return true;
}
else
{
return false;
}
}
//print net disconnect
public static async Task CheckNet()
{
if (!PingTest())
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("No Internet :(");
Console.WriteLine("the App Restart Ofter 2 Seconds :(");
System.Threading.Thread.Sleep(2000);
ResetMe();
}
}
//restart app
static void ResetMe()
{
var fileName = Assembly.GetExecutingAssembly().Location;
System.Diagnostics.Process.Start(fileName);
Environment.Exit(0);
}
public static async Task Runwo()
{
//get internet data
}
نقل قول: اجرای همزمان دو تسک در کنسول سی شارپ
اینجور برنامه ها باید بره تو دل windows service
نقل قول: اجرای همزمان دو تسک در کنسول سی شارپ
خب این دستور چک کردن نت فقط یه بار اجرا میشه اونم ابتدای شروع برنامه... شما باید از یه قطعه کد ایونت بیس (event based) یا بر اساس ایونت استفاده کنین که بدون نیاز به چک کردن شما، خودش اتومات با قطع شدن نت، بلافاصله بیاد و برنامه رو ریستارت کنه (من دقیق این راه حل شمارو متوجه نشدم ریستارت کنه که چی بشه؟؟ فرضا نت همچنان قطعه :متفکر:)
نقل قول: اجرای همزمان دو تسک در کنسول سی شارپ
نقل قول:
نوشته شده توسط
mr.sirwan
خب این دستور چک کردن نت فقط یه بار اجرا میشه اونم ابتدای شروع برنامه... شما باید از یه قطعه کد ایونت بیس (event based) یا بر اساس ایونت استفاده کنین که بدون نیاز به چک کردن شما، خودش اتومات با قطع شدن نت، بلافاصله بیاد و برنامه رو ریستارت کنه (من دقیق این راه حل شمارو متوجه نشدم ریستارت کنه که چی بشه؟؟ فرضا نت همچنان قطعه :متفکر:)
خب کاش این راه حل رو بگید چجوری پیاده کنم من بلد نیستم یادم بدید عالی میشه. خب ریستارت هم بخاطر یه منطق خاصه که مشکل ساز نیست. یه مقطع هایی هست که نت لحظه ای قطع میشه تو سرورمون اکثرا هم بخاطر utm مونه که نتونستم علتشو بفهمم گاها هم از طرف ای اس پی هست . وقتی نت قطع میشد تو حلقه ای که داده از نت میخوند گیر میکرد . چون این قطعی لحظه ای هست میخوام ریستارت بشه که به امتمال ۹۰ درصد همون لحظه نت وصل میشه و برنامه از اول اجرا بشه
نقل قول: اجرای همزمان دو task در کنسول سی شارپ
دوستان راه حلی ندارن؟:افسرده:
نقل قول: اجرای همزمان دو task در کنسول سی شارپ
با شی تایمر کار کنید عزیز جان این کارها رو برید داخل سرویس و از تایمر ایتفاده کنید کنسول چیز تمیزی نیست.
نقل قول: اجرای همزمان دو task در کنسول سی شارپ
نقل قول:
نوشته شده توسط
parvizwpf
با شی تایمر کار کنید عزیز جان این کارها رو برید داخل سرویس و از تایمر ایتفاده کنید کنسول چیز تمیزی نیست.
از قضا امروز از تایمر استفاده کردم. تایمرشو اشتباه تنضیم کردم nتا کنسول باز شد سرور هنگ کرد :لبخند:
مجبور شدم ریست کنم.:قهقهه:
باید برم رو همون وب سرویس:متفکر:
میشه یک وب سرویس رو با یه برنامه یا وب سرویس دیگه ریستارت کرد؟
نقل قول: اجرای همزمان دو task در کنسول سی شارپ
مگه برنامه ات ویندوزی نیست؟
من منظورم ویندوز سرویس هست
نقل قول: اجرای همزمان دو task در کنسول سی شارپ
نقل قول:
نوشته شده توسط
parvizwpf
مگه برنامه ات ویندوزی نیست؟
من منظورم ویندوز سرویس هست
منم منظورم همون ویندوز سرویس بود. اشتباه تایپ کردم.
نه یه ربات بود که برای اعضای شرکت داره سرویس میده و به صورت کنسول نوشته شده. حالا وقتی نت قطع میشه تو قسمتی که ربات داره اطلاعات رو میخونه گیر میکنه. خطا هم نداره. نت هم وصل بشه کارشو ادامه نمیده باید دستی ریستارت کرد. میخواستم تنظیم کنم وقتی نت قطع میشه ریستارت بشه. نت هم لحظه ای قطع میشه. که با یه ریستارت برنامه به راه می افته.
نقل قول: اجرای همزمان دو task در کنسول سی شارپ
ربات تلگرام رو با چی نوشتید؟
نقل قول: اجرای همزمان دو task در کنسول سی شارپ
نقل قول:
نوشته شده توسط
parvizwpf
ربات تلگرام رو با چی نوشتید؟
با NetTelegramBotAPI نوشتم.
نت قطع بشه تو این کد گیر میکنه. یعنی یه دستور رایت لاین نوشتم که بعد این اجرا میشه که وقتی نت نباشه اجرا نمیشه
var updates = await bot.MakeRequestAsync(new GetUpdates() { Offset = offcet });
Console.WriteLine("Update Count is: {0}", updates.Count());
نقل قول: اجرای همزمان دو task در کنسول سی شارپ
اون لایبرری معرفه با بهتره که توسط robbin muller نوشته شده خودش اینو هندل کرده . بهر حال شما با catch کردن یک پیام میتونید مجدد توی سیکل یه تایمر این رو بررسی کنید. من باتم رو با ویندوز سرویس نوشته ام
نقل قول: اجرای همزمان دو task در کنسول سی شارپ
نقل قول:
نوشته شده توسط
parvizwpf
اون لایبرری معرفه با بهتره که توسط robbin muller نوشته شده خودش اینو هندل کرده . بهر حال شما با catch کردن یک پیام میتونید مجدد توی سیکل یه تایمر این رو بررسی کنید. من باتم رو با ویندوز سرویس نوشته ام
میتونیدراهنمایی و اطلاعات بیشتری رو در این مورد برام بگید یا اینجا یا Ramin.mor47@gmail.com ممنون میشم
نقل قول: اجرای همزمان دو task در کنسول سی شارپ
نقل قول:
نوشته شده توسط
رامین مرادی
با NetTelegramBotAPI نوشتم.
نت قطع بشه تو این کد گیر میکنه. یعنی یه دستور رایت لاین نوشتم که بعد این اجرا میشه که وقتی نت نباشه اجرا نمیشه
var updates = await bot.MakeRequestAsync(new GetUpdates() { Offset = offcet });
Console.WriteLine("Update Count is: {0}", updates.Count());
مگه داخل حلقه while نیست کداتون؟ خب بصورت دوره ای خودش داره چک میکنه دیگه، یعنی اگه نت به قول شما به صورت لحظه ای قطع بشه حلقه while همچنان به کار خودش ادامه میده، فک نکنم update ی رو هم از دست بده (در این مورد مطمئن نیستم)