আমি একটি উইনফর্মস অ্যাপ্লিকেশন লিখছি যা কোনও ইউএসবি এইচআইডি ক্লাস ডিভাইসে ডেটা স্থানান্তর করে। আমার অ্যাপ্লিকেশনটিতে দুর্দান্ত জেনেরিক এইচআইডি লাইব্রেরি v6.0 ব্যবহার করা হয়েছে যা এখানে পাওয়া যাবে । সংক্ষেপে, যখন আমার ডিভাইসে ডেটা লিখতে হবে, এই কোডটি বলা হয়:
private async void RequestToSendOutputReport(List<byte[]> byteArrays)
{
foreach (byte[] b in byteArrays)
{
while (condition)
{
// we'll typically execute this code many times until the condition is no longer met
Task t = SendOutputReportViaInterruptTransfer();
await t;
}
// read some data from device; we need to wait for this to return
RequestToGetInputReport();
}
}
আমার কোডটি যখন লুপটির বাইরে চলে যায় তখন আমাকে ডিভাইস থেকে কিছু ডেটা পড়তে হবে। তবে, ডিভাইস এখনই প্রতিক্রিয়া জানাতে সক্ষম হচ্ছে না তাই আমার চালিয়ে যাওয়ার আগে এই কলটি ফিরে আসার জন্য অপেক্ষা করা দরকার wait এটি বর্তমানে বিদ্যমান থাকায়, অনুরোধটিগেটপুট রিপোর্ট () এইভাবে ঘোষিত হয়েছে:
private async void RequestToGetInputReport()
{
// lots of code prior to this
int bytesRead = await GetInputReportViaInterruptTransfer();
}
এটি মূল্যবান কিসের জন্য, getInputReportViaInterruptTransfer () এর ঘোষণাপত্রটি এর মতো দেখাচ্ছে:
internal async Task<int> GetInputReportViaInterruptTransfer()
দুর্ভাগ্যক্রমে, আমি .NET 4.5 তে নতুন async / অপেক্ষারত প্রযুক্তির কাজগুলির সাথে খুব বেশি পরিচিত নই। অপেক্ষার কীওয়ার্ডটি সম্পর্কে আমি প্রথমে কিছুটা পড়া করেছি এবং এটি আমাকে এই ধারণাটি দিয়েছে যে অনুরোধটোগেটপুটপোর্টের অভ্যন্তরীণ গেটইনপুটপুরিয়াভিটার্নটার্ন্ট ট্রান্সফার () এর জন্য কলটি অপেক্ষা করবে (এবং সম্ভবত এটি হয়?) তবে এটি অনুরোধটোগেটআইপুটপোর্টের কল হিসাবে মনে হয় না) আমি নিজেই অপেক্ষা করছি কারণ আমি প্রায় লুপের সাথে সাথে লুপটি আবার প্রবেশ করব বলে মনে হচ্ছে?
আমি যে আচরণটি দেখছি তা কি কেউ স্পষ্ট করতে পারেন?
void
করাTask
।