Ich schreibe eine WinForms-Anwendung, die Daten auf ein Gerät der USB-HID-Klasse überträgt. Meine Anwendung verwendet die hervorragende generische HID-Bibliothek v6.0, die hier zu finden ist . Kurz gesagt, wenn ich Daten auf das Gerät schreiben muss, wird folgender Code aufgerufen:
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();
}
}
Wenn mein Code aus der while-Schleife herausfällt, muss ich einige Daten vom Gerät lesen. Das Gerät kann jedoch nicht sofort antworten, daher muss ich warten, bis dieser Anruf zurückkommt, bevor ich fortfahre. RequestToGetInputReport () wird wie folgt deklariert:
private async void RequestToGetInputReport()
{
// lots of code prior to this
int bytesRead = await GetInputReportViaInterruptTransfer();
}
Für das, was es wert ist, sieht die Deklaration für GetInputReportViaInterruptTransfer () folgendermaßen aus:
internal async Task<int> GetInputReportViaInterruptTransfer()
Leider bin ich mit der Funktionsweise der neuen Async / Wait-Technologien in .NET 4.5 nicht sehr vertraut. Ich habe vorhin ein wenig über das Schlüsselwort await gelesen und dadurch den Eindruck erweckt, dass der Aufruf von GetInputReportViaInterruptTransfer () in RequestToGetInputReport () warten würde (und vielleicht auch?), Aber es scheint nicht so, als würde RequestToGetInputReport () aufgerufen selbst wartet, weil ich fast sofort wieder in die while-Schleife eintrete?
Kann jemand das Verhalten klären, das ich sehe?
void
zu dem zu wechseln ,Task
was Sie gesagt hatten.