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?
fuente
void
aTask
lo que había dicho.GetAwaiter().GetResult()
Task
representa la ejecución del método, por loreturn
que se colocan valores y se colocanTask.Result
excepcionesTask.Exception
. Convoid
, el compilador no tiene ningún lugar para colocar excepciones, por lo que simplemente se vuelven a generar en un subproceso de grupo de subprocesos.