Я пишу приложение 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();
}
}
Когда мой код выпадает из цикла while, мне нужно прочитать некоторые данные с устройства. Однако устройство не может ответить сразу, поэтому мне нужно дождаться, пока этот вызов вернется, прежде чем продолжить. Поскольку он в настоящее время существует, RequestToGetInputReport() объявляется следующим образом:
private async void RequestToGetInputReport()
{
// lots of code prior to this
int bytesRead = await GetInputReportViaInterruptTransfer();
}
Для чего это стоит, объявление для GetInputReportViaInterruptTransfer() выглядит так:
internal async Task<int> GetInputReportViaInterruptTransfer()
К сожалению, я не очень хорошо разбираюсь в работе новых технологий async/await в .NET 4.5. Я немного читал ранее о ключевом слове "Ожидание", и это создавало впечатление, что вызов GetInputReportViaInterruptTransfer() внутри RequestToGetInputReport() будет ждать (и, возможно, это так?), Но это не похоже на вызов RequestToGetInputReport() сам ждет, потому что я, кажется, сразу возвращаюсь в цикл while?
Может ли кто-нибудь уточнить поведение, которое я вижу?