Я пишу приложение WinForms, которое передает данные на устройство класса USB HID. В моем приложении используется отличная Generic HID library 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. Ранее я немного читал о ключевом слове await, и у меня сложилось впечатление, что вызов GetInputReportViaInterruptTransfer () внутри RequestToGetInputReport () будет ждать (и, может быть, это так?), Но это не похоже на вызов RequestToGetInputReport () сам ждет, потому что мне кажется, что я почти сразу повторно вхожу в цикл while?
Может ли кто-нибудь прояснить поведение, которое я наблюдаю?
void
на то,Task
что вы сказали.