কীভাবে প্রত্যাশিত থ্রেড.স্লিপ পাবেন?


139

আমি অপেক্ষা / ঘুমের দৃষ্টান্তের ভিত্তিতে একটি নেটওয়ার্ক-ভিত্তিক অ্যাপ্লিকেশন লিখছি।

কখনও কখনও, সংযোগ ত্রুটিগুলি ঘটে থাকে এবং আমার অভিজ্ঞতায় এটি কিছু সময় অপেক্ষা করার জন্য অর্থ প্রদান করে এবং আবার অপারেশন পুনরায় চেষ্টা করুন।

সমস্যাটি হ'ল আমি যদি থ্রেডটি ব্যবহার করি or

থ্রেড প্রতিস্থাপন করা উচিত। স্লিপ (10000) এর সাথে একই প্রভাব অর্জন করতে

await Thread.SleepAsync(10000)

?

হালনাগাদ

আমি কোনও উত্তর পছন্দ করব যা কোনও অতিরিক্ত থ্রেড তৈরি না করে এটি করে

উত্তর:


323

অন্য উত্তরগুলি নতুন থ্রেড শুরু করার পরামর্শ দিচ্ছে এটি একটি খারাপ ধারণা - এটি করার কোনও দরকার নেই। async/ এর পয়েন্টের অংশটি awaitহ'ল আপনার অ্যাপ্লিকেশনটির প্রয়োজনীয় থ্রেডের সংখ্যা হ্রাস করা

পরিবর্তে আপনার ব্যবহার করা উচিত Task.Delayযা একটি নতুন থ্রেডের প্রয়োজন হয় না , এবং এই উদ্দেশ্যে সুনির্দিষ্টভাবে নকশা করা হয়েছিল:

// Execution of the async method will continue one second later, but without
// blocking.
await Task.Delay(1000);

আমি এখনও a4.5 স্টাফ সঙ্গে গ্রিপস আসছি। এই বিবৃতি দেওয়ার পরে কোডটিতে কার্যকর করার শাখাটি কোথায়? নিদ্রাহীন / অবরুদ্ধ অংশটি কি এটি চালায় বা 'থ্রেড' যা অপেক্ষা করে? প্রধান অ-ব্লকিং এক্সিকিউশনটি কেবল নিম্নলিখিত অনুসরণ করে (ওরফে রিটার্ন) ছেড়ে যাবে?
কেনে

1
হাঁ। এটি ঠিক আমার যা প্রয়োজন
আর্সেন জহরে

1
@kenny: তুমি আমার খুঁজে পেতে পারেন asyncইন্ট্রো সহায়ক। যখন awaitable দ্বারা ফিরে Task.Delayহয় awaited, এটা সম্পূর্ণ হয়নি যেহেতু, বর্তমান পদ্ধতি একটি অসম্পূর্ণ টাস্ক ফেরৎ। পরে, যখন Delayসম্পূর্ণ হয় (টাইমার ছাড়াই, কোনও থ্রেড নয়), পদ্ধতির বাকী অংশটি চালানোর জন্য নির্ধারিত হয়। ধারাবাহিকতা একটি "প্রসঙ্গ" যা রান পারে আমার ব্লগে বিস্তারিত - একই মূল থ্রেড ফিরে যান।
স্টিফেন ক্লিয়ারি

@ স্টেফেনক্রিয়ারি এর জন্য ধন্যবাদ সুতরাং আমি কি ঠিক বলছি যে অপেক্ষার পরে কোডটি নির্বাহের জন্য 'নির্ধারিত' এবং কলিং থ্রেডের ফেরত দেয়?
কেনে

2
হ্যাঁ, কলিং থ্রেডটি অবিলম্বে (অবিলম্বে) এবং কোড awaitনির্ধারিত হওয়ার পরে (অবশেষে) ফিরে আসে।
স্টিফেন ক্লিয়ারি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.