USBHIDクラスデバイスにデータを転送するWinFormsアプリケーションを作成しています。私のアプリケーションは、ここにある優れたGenericHIDライブラリ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();
}
}
コードがwhileループから外れると、デバイスからデータを読み取る必要があります。ただし、デバイスはすぐに応答できないため、続行する前に、この呼び出しが戻るのを待つ必要があります。現在存在しているため、RequestToGetInputReport()は次のように宣言されます。
private async void RequestToGetInputReport()
{
// lots of code prior to this
int bytesRead = await GetInputReportViaInterruptTransfer();
}
GetInputReportViaInterruptTransfer()の宣言は、次のようになります。
internal async Task<int> GetInputReportViaInterruptTransfer()
残念ながら、私は.NET4.5の新しいasync/awaitテクノロジーの仕組みにあまり詳しくありません。awaitキーワードについて少し前に読んだところ、RequestToGetInputReport()内のGetInputReportViaInterruptTransfer()の呼び出しは待機する(そしておそらくそうなるのでしょうか?)という印象を与えましたが、RequestToGetInputReport()の呼び出しのようには見えません。ほぼすぐにwhileループに再び入るように見えるので、それ自体が待機していますか?
誰かが私が見ている行動を明確にすることができますか?