نمایش نتایج 1 تا 8 از 8

نام تاپیک: درخواست WebRequest در thread

  1. #1

    Question درخواست WebRequest در thread

    سلام دوستان
    یک سوال دارم که خیلی باهاش ور رفتم ولی به جوابی نرسیدم و اون اینه که ایا میشه داخل یک ترد از دستور WebRequest برای صدا زدن یک api و گرفتن اطلاعات از آن استفاده کرد؟
    لطفا سریع راهنمایی کنید
    تشکر

  2. #2

    نقل قول: درخواست WebRequest در thread

    نقل قول نوشته شده توسط a.golzar66 مشاهده تاپیک
    سلام دوستان
    یک سوال دارم که خیلی باهاش ور رفتم ولی به جوابی نرسیدم و اون اینه که ایا میشه داخل یک ترد از دستور WebRequest برای صدا زدن یک api و گرفتن اطلاعات از آن استفاده کرد؟
    لطفا سریع راهنمایی کنید
    تشکر
    بله. لزومی نداره که حتما در Thread اصلی که فرم رو مدیریت می کنه اجرا بشه، می توانید به تعداد مورد نیازتون Thread بسازید و درخواست ها رو در Thread مجزا ایجاد کنید.
    البته اگر هدف تون اینه که دریافت پاسخ در زمینه انجام بشه و در طی مدت زمانی که منتظر دریافت پاسخ ئه بتوانید کارهای دیگری رو انجام بدید، قابلیت هایی مثل HttpWebRequest.BeginGetResponse وجود داره و لزوما نیازی نیست که خودتون Thread مجزا بسازید.

  3. #3

    نقل قول: درخواست WebRequest در thread

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    بله. لزومی نداره که حتما در Thread اصلی که فرم رو مدیریت می کنه اجرا بشه، می توانید به تعداد مورد نیازتون Thread بسازید و درخواست ها رو در Thread مجزا ایجاد کنید.
    البته اگر هدف تون اینه که دریافت پاسخ در زمینه انجام بشه و در طی مدت زمانی که منتظر دریافت پاسخ ئه بتوانید کارهای دیگری رو انجام بدید، قابلیت هایی مثل HttpWebRequest.BeginGetResponse وجود داره و لزوما نیازی نیست که خودتون Thread مجزا بسازید.
    ممنون دوست عزیز- ببخشید اگر سوالات من یه مقدار مبتدی هست
    ایا میشه تو ترد متغیر تعریف کرد مثلا
    long sumEntered = 0;                Province thisProvince = null;
    var stopwatch = new Stopwatch();
    int sumModemReset = 0;
    Category cat = null;
    int numReadCity = 0;
    int numReadCat = 0;
    var allCity = "";
    var allCat = "";


    و اینکه چه کارهایی را نمیشه در thread انجام داد-چون من فقط یک ترد دارم ولی وقتی اجرا میشه بعد از چند خط که اجرا کرد و به کد زیر رسید یکدفعه از ترد میاد بیرون و خط بعد myThread.start() را اجرا میکنه

  4. #4
    کاربر دائمی آواتار taghvajou
    تاریخ عضویت
    تیر 1387
    محل زندگی
    تهران
    سن
    35
    پست
    571

    نقل قول: درخواست WebRequest در thread

    سلام

    همون طور که دوستمون اشاره کرد، برای اینکه وب ریکوست رو آسینک میشه اجرا کرد که در بک گراند خودش ترد جدایی براش اجرا میکنه.

    بخش دوم سوال:
    اینکه ترد چه کارهایی نمیشه باهاش کرد، باید اول مشخص کنیم کدوم ترد؟ اگه شما ترد جدید ساختی (یا ورکر بگ گراند)، موقع اجرا دسترسی به یو آی نداره . مثلا با یه ترد جدید نمیتونی یه فرم جدید نمایش بدی. فرم میاد بالا ولی خالیه! وقتی فرم اصلی اجرا میشه میفته تو لوپ و دیگه دسترسی به کنترلها و داده هایی که یوزر وارد کرده نیست.

    به صورت کلی داخل ترد میشه متغیر تعریف کرد. اینکه داخل ترد یه استاپ واچ تعریف بشه یا چیزهایی که تو کد نشون دادین و این تیکه کد هیچ ایرادی در ظاهر نداره.
    مگر اینکه بخوایم از این ترد به یه ترد دیگه :
    اگه قصد دارین شی تعریف یا تغییر کنین که مربوط به ترد دیگه، نمیشه. خطای کراس ترد میده! مگر اینکه ترد یو آیی رو اینوک کنیم و اجرا رو به دست بگیره و ... یا
    یا اگر قرار یه مقداری رو از داخل فرم بخونی تو یه متغیر نگه دار و داخل ترد جدیدش از مقدار متغیر استفاده کن.

    اگه میشه کاملتر بذارین کد رو تا ببینیم چی به چیه

  5. #5

    نقل قول: درخواست WebRequest در thread

    ممنون دوست عزیز الان میزارم
    آخرین ویرایش به وسیله a.golzar66 : یک شنبه 10 فروردین 1399 در 12:03 عصر


  6. #6

    نقل قول: درخواست WebRequest در thread

    نقل قول نوشته شده توسط taghvajou مشاهده تاپیک
    سلام

    همون طور که دوستمون اشاره کرد، برای اینکه وب ریکوست رو آسینک میشه اجرا کرد که در بک گراند خودش ترد جدایی براش اجرا میکنه.

    بخش دوم سوال:
    اینکه ترد چه کارهایی نمیشه باهاش کرد، باید اول مشخص کنیم کدوم ترد؟ اگه شما ترد جدید ساختی (یا ورکر بگ گراند)، موقع اجرا دسترسی به یو آی نداره . مثلا با یه ترد جدید نمیتونی یه فرم جدید نمایش بدی. فرم میاد بالا ولی خالیه! وقتی فرم اصلی اجرا میشه میفته تو لوپ و دیگه دسترسی به کنترلها و داده هایی که یوزر وارد کرده نیست.

    به صورت کلی داخل ترد میشه متغیر تعریف کرد. اینکه داخل ترد یه استاپ واچ تعریف بشه یا چیزهایی که تو کد نشون دادین و این تیکه کد هیچ ایرادی در ظاهر نداره.
    مگر اینکه بخوایم از این ترد به یه ترد دیگه :
    اگه قصد دارین شی تعریف یا تغییر کنین که مربوط به ترد دیگه، نمیشه. خطای کراس ترد میده! مگر اینکه ترد یو آیی رو اینوک کنیم و اجرا رو به دست بگیره و ... یا
    یا اگر قرار یه مقداری رو از داخل فرم بخونی تو یه متغیر نگه دار و داخل ترد جدیدش از مقدار متغیر استفاده کن.

    اگه میشه کاملتر بذارین کد رو تا ببینیم چی به چیه

    ممنون که وقت میزارین
    کد من شبیه این هست ایا این کد مشکلی نداره

     

    public static class ThreadManager
    {
    public static Thread MyThread { get; set; }
    public static int IsCancel = 0;
    public static string ErroreMessage { get; set; }
    public static GetFromApiDtos GetFromApi(List<string> city, List<int> category)
    {
    long sumEntered = 0;
    Province thisProvince = null;
    var stopwatch = new Stopwatch();
    int sumModemReset = 0;
    Category cat = null;
    int numReadCity = 0;
    int numReadCat = 0;
    var allCity = "";
    var allCat = "";
    stopwatch.Start();



    MyThread = new Thread(async () =>
    {

    #region MyCode
    try
    {

    List<string> lstProduckToken = null;
    using (var db = new ApiDB())
    {
    if (category != null && category.Count > 0)
    {
    var catId = category[numReadCat];
    cat = db.Categories.Find(catId);
    }


    var cityname = city[numReadCity];
    thisProvince =await db.Provinces.FirstOrDefaultAsync(x => x.EnName == cityname);


    lstProduckToken =await db.Products.Where(x => x.City == thisProvince.FaName).Select(x => x.Token)
    .ToListAsync();
    }



    }
    var request = WebRequest.Create($"https://api/mysite/]}" );


    request.Method = "GET";
    request.ContentType = "application/json; charset=utf-8";


    Date_Time.Date Dates = new Date();
    Date_Time.Time Times = new Time();

    var response = (HttpWebResponse)await request.GetResponseAsync();
    using (var streamReader = new StreamReader(response.GetResponseStream()))
    {
    var responseString = await streamReader.ReadToEndAsync();
    JObject json = JObject.Parse(responseString);


    using (var db = new ApiDB())
    {
    var countFinded = json["prod"].Count();

    if (json["prod"].HasValues)
    .
    .
    .
    .
    .

    {


    در اخر هم ترد را استارت کردم ومقدار زیر را برای تابع استاتیک بالا که کدها داخل ان نوشته شده (GetFromApi) برمیگردانم

     MyThread.Start();            MyThread.Join();


    var data = new GetFromApiDtos()
    {
    City = allCity,
    ElapsedTime = stopwatch.Elapsed.TotalSeconds,
    SumEntered = sumEntered,
    SumModemReset = sumModemReset,
    ThisCat = allCat,
    IsCancel = IsCancel,
    Errore = ErroreMessage
    };
    return data;

    باعرض پوزش من برنامه asp.net mvc هست ولی گفتم شاید موضوع مورد بحث زیاد فرقی نداشته باشه که در سی شارپ باشه یا asp
    ببینید کد من منتظر نمیشه که ترد کارش تموم بشه بعد بیاد مقدار رو برگردونه بلکه همون اول همزمان با اجرای ترد میاد مقدار را برمیگرداند و بعد میره ترد را کامل اجرا میکنه؟؟؟
    یه سوال هم اینکه ایا در ترد میتونم مقداری را برگردانم

    ایا میشه از دستور goto در داخل ترد استفاده کرد
    فرق تسک با ترد چیه

    ببخشید اگر زیاد شد

  7. #7

    نقل قول: درخواست WebRequest در thread

    یکی از مشکلات مهم من اینه که وقتی به این خط اول میرسه منتظر رسپانس نمیشه و میره دستورات بعد از ترد را اجرا میکنه و بعد دوباره وقتی رسپانس جوابش رسید دوباره میره ادامه کار ترد را انجام میده

     var response = (HttpWebResponse)await request.GetResponseAsync();                    using (var streamReader = new StreamReader(response.GetResponseStream()))
    {
    var responseString = await streamReader.ReadToEndAsync();
    JObject json = JObject.Parse(responseString);
    }

  8. #8

    نقل قول: درخواست WebRequest در thread

    دوستان چرا کسی جواب نمیده

تاپیک های مشابه

  1. webrequest
    نوشته شده توسط moh355 در بخش ASP.NET Web Forms
    پاسخ: 0
    آخرین پست: سه شنبه 22 دی 1394, 12:19 عصر
  2. کاربرد کلاس webrequest
    نوشته شده توسط alibabaei2 در بخش ASP.NET Web Forms
    پاسخ: 4
    آخرین پست: شنبه 07 دی 1392, 16:04 عصر
  3. سوال: توقف برنامه در سومین درخواست با webRequest
    نوشته شده توسط bade saba در بخش C#‎‎
    پاسخ: 1
    آخرین پست: چهارشنبه 28 مهر 1389, 22:16 عصر
  4. webrequest
    نوشته شده توسط نسیم 96 در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: سه شنبه 14 مهر 1388, 09:41 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •