Я пишу програму WinForms, яка передає дані на пристрій класу USB HID. У моїй програмі використовується чудова бібліотека HID v6.0, яку можна знайти тут . Коротше кажучи, коли мені потрібно записати дані на пристрій, це код, який викликається:
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();
}
}
Коли мій код випадає з циклу while, мені потрібно прочитати деякі дані з пристрою. Однак пристрій не зможе відповісти відразу, тому мені потрібно чекати, коли цей дзвінок повернеться, перш ніж продовжувати. Як це існує, RequestToGetInputReport () оголошується так:
private async void RequestToGetInputReport()
{
// lots of code prior to this
int bytesRead = await GetInputReportViaInterruptTransfer();
}
Для чого це варто, декларація для GetInputReportViaInterruptTransfer () виглядає так:
internal async Task<int> GetInputReportViaInterruptTransfer()
На жаль, я не дуже знайомий з роботою нових технологій асинхрон / очікування в .NET 4.5. Я трохи почитав раніше про ключове слово, що очікує, і це створило мені враження, що дзвінок на GetInputReportViaInterruptTransfer () всередині RequestToGetInputReport () зачекає (а може, і є?), Але це не схоже на дзвінок на RequestToGetInputReport () сама чекає, тому що я, здається, знову входжу в цикл while майже відразу?
Хтось може уточнити поведінку, яку я бачу?
void
доTask
так само , як ви сказали.