J'écris une application WinForms qui transfère des données vers un périphérique de classe USB HID. Mon application utilise l'excellente bibliothèque Generic HID v6.0 qui peut être trouvée ici . En un mot, lorsque j'ai besoin d'écrire des données sur l'appareil, c'est le code qui est appelé:
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();
}
}
Lorsque mon code sort de la boucle while, je dois lire certaines données de l'appareil. Cependant, l'appareil ne peut pas répondre tout de suite. Je dois donc attendre le retour de cet appel avant de continuer. Tel qu'il existe actuellement, RequestToGetInputReport () est déclaré comme ceci:
private async void RequestToGetInputReport()
{
// lots of code prior to this
int bytesRead = await GetInputReportViaInterruptTransfer();
}
Pour ce que ça vaut, la déclaration de GetInputReportViaInterruptTransfer () ressemble à ceci:
internal async Task<int> GetInputReportViaInterruptTransfer()
Malheureusement, je ne suis pas très familier avec le fonctionnement des nouvelles technologies async / await dans .NET 4.5. J'ai fait une petite lecture plus tôt sur le mot-clé await et cela m'a donné l'impression que l'appel à GetInputReportViaInterruptTransfer () à l'intérieur de RequestToGetInputReport () attendrait (et peut-être qu'il le fait?) Mais cela ne ressemble pas à l'appel à RequestToGetInputReport () lui-même attend parce que je semble rentrer dans la boucle while presque immédiatement?
Quelqu'un peut-il clarifier le comportement que je vois?
void
àTask
tout comme vous l' aviez dit.