Estoy escribiendo una aplicación WinForms que transfiere datos a un dispositivo de clase USB HID. Mi aplicación utiliza la excelente biblioteca genérica HID v6.0 que se puede encontrar aquí . En pocas palabras, cuando necesito escribir datos en el dispositivo, este es el código que se llama:
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();
}
}
Cuando mi código cae del ciclo while, necesito leer algunos datos del dispositivo. Sin embargo, el dispositivo no puede responder de inmediato, por lo que debo esperar a que vuelva esta llamada antes de continuar. Como existe actualmente, RequestToGetInputReport () se declara así:
private async void RequestToGetInputReport()
{
// lots of code prior to this
int bytesRead = await GetInputReportViaInterruptTransfer();
}
Para lo que vale, la declaración para GetInputReportViaInterruptTransfer () se ve así:
internal async Task<int> GetInputReportViaInterruptTransfer()
Desafortunadamente, no estoy muy familiarizado con el funcionamiento de las nuevas tecnologías async / await en .NET 4.5. Leí un poco antes sobre la palabra clave de espera y eso me dio la impresión de que la llamada a GetInputReportViaInterruptTransfer () dentro de RequestToGetInputReport () esperaría (¿y tal vez sí?) Pero no parece la llamada a RequestToGetInputReport () en sí está esperando porque parece que estoy volviendo a entrar en el ciclo while casi de inmediato?
¿Alguien puede aclarar el comportamiento que estoy viendo?
void
aTask
lo que había dicho.