Estou escrevendo um aplicativo WinForms que transfere dados para um dispositivo de classe USB HID. Meu aplicativo usa a excelente biblioteca HID genérica v6.0, que pode ser encontrada aqui . Em poucas palavras, quando preciso gravar dados no dispositivo, este é o código que é chamado:
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();
}
}
Quando meu código sai do loop while, preciso ler alguns dados do dispositivo. No entanto, o dispositivo não pode responder imediatamente, por isso preciso aguardar o retorno dessa ligação antes de continuar. Como existe atualmente, RequestToGetInputReport () é declarado assim:
private async void RequestToGetInputReport()
{
// lots of code prior to this
int bytesRead = await GetInputReportViaInterruptTransfer();
}
Quanto vale a pena, a declaração para GetInputReportViaInterruptTransfer () é semelhante a esta:
internal async Task<int> GetInputReportViaInterruptTransfer()
Infelizmente, não estou muito familiarizado com o funcionamento das novas tecnologias async / wait no .NET 4.5. Eu fiz uma pequena leitura anterior sobre a palavra-chave wait e isso me deu a impressão de que a chamada para GetInputReportViaInterruptTransfer () dentro de RequestToGetInputReport () esperaria (e talvez espere?), Mas não parece ser a chamada para RequestToGetInputReport () em si está esperando porque parece que eu estou entrando novamente no loop while quase imediatamente?
Alguém pode esclarecer o comportamento que estou vendo?
void
paraTask
exatamente como você havia dito.