मैं एक WinForms एप्लिकेशन लिख रहा हूं जो USB HID क्लास डिवाइस में डेटा ट्रांसफर करता है। मेरा एप्लिकेशन उत्कृष्ट जेनेरिक HID लाइब्रेरी 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();
}
}
जब मेरा कोड लूप से बाहर निकल जाता है, तो मुझे डिवाइस से कुछ डेटा पढ़ने की आवश्यकता होती है। हालाँकि, डिवाइस अभी प्रतिक्रिया देने में सक्षम नहीं है इसलिए मुझे जारी रखने से पहले इस कॉल के लौटने की प्रतीक्षा करनी होगी। जैसा कि यह वर्तमान में मौजूद है, RequestToGetInputReport () इस तरह से घोषित किया गया है:
private async void RequestToGetInputReport()
{
// lots of code prior to this
int bytesRead = await GetInputReportViaInterruptTransfer();
}
इसके लायक क्या है, GetInputReportViaInterruptTransfer () के लिए घोषणा इस प्रकार है:
internal async Task<int> GetInputReportViaInterruptTransfer()
दुर्भाग्य से, मैं .NET 4.5 में नई async / प्रतीक्षा प्रौद्योगिकी के कामकाज से बहुत परिचित नहीं हूं। मैंने थोड़ी देर पहले वाट्सएप कीवर्ड के बारे में पढ़ा और इससे मुझे यह आभास हुआ कि RequestToGetInputReport () के अंदर GetInputReportViaInterruptTransfer () के लिए कॉल प्रतीक्षा करेगा (और हो सकता है?) लेकिन यह RequestToGetInputReport () के लिए कॉल की तरह प्रतीत नहीं होता है? स्वयं प्रतीक्षा कर रहा है क्योंकि मैं लगभग तुरंत लूप में फिर से प्रवेश कर रहा हूं?
क्या कोई भी मेरे द्वारा देखे जा रहे व्यवहार को स्पष्ट कर सकता है?
void
जानाTask
चाहिए।