USB HIDクラスデバイスにデータを転送するWinFormsアプリケーションを書いています。私のアプリケーションは、こちらにある優れたGeneric 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();
}
}
コードがwhileループから抜けると、デバイスからデータを読み取る必要があります。ただし、デバイスはすぐに応答できないため、この通話が戻るのを待ってから続行する必要があります。現在存在しているため、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 / awaitテクノロジーの仕組みに詳しくありません。以前にawaitキーワードについて少し読んだので、RequestToGetInputReport()内のGetInputReportViaInterruptTransfer()への呼び出しが待機する(そしておそらく待機する)ように見えましたが、RequestToGetInputReport()への呼び出しのようには見えませんほとんどすぐにwhileループに再び入るように見えるので、それ自体が待っていますか?
誰かが私が見ている行動を明確にできますか?
void
するTask
ことでした。