Saya sedang menulis aplikasi WinForms yang mentransfer data ke perangkat kelas HID USB. Aplikasi saya menggunakan pustaka HID Generic v6.0 yang luar biasa yang dapat ditemukan di sini . Singkatnya, ketika saya perlu menulis data ke perangkat, ini adalah kode yang dipanggil:
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();
}
}
Ketika kode saya keluar dari loop sementara, saya perlu membaca beberapa data dari perangkat. Namun, perangkat tidak dapat segera merespons sehingga saya harus menunggu panggilan ini kembali sebelum saya melanjutkan. Karena saat ini ada, RequestToGetInputReport () dinyatakan seperti ini:
private async void RequestToGetInputReport()
{
// lots of code prior to this
int bytesRead = await GetInputReportViaInterruptTransfer();
}
Untuk apa nilainya, deklarasi untuk GetInputReportViaInterruptTransfer () terlihat seperti ini:
internal async Task<int> GetInputReportViaInterruptTransfer()
Sayangnya, saya tidak terlalu terbiasa dengan cara kerja teknologi async / menunggu baru di .NET 4.5. Saya melakukan sedikit bacaan sebelumnya tentang kata kunci yang menunggu dan yang memberi saya kesan bahwa panggilan untuk GetInputReportViaInterruptTransfer () di dalam RequestToGetInputReport () akan menunggu (dan mungkin ya?) Tetapi sepertinya panggilan ke RequestToGetInputReport () itu sendiri sedang menunggu karena saya tampaknya akan segera memasuki loop sementara?
Adakah yang bisa mengklarifikasi perilaku yang saya lihat?
void
menjadiTask
seperti yang Anda katakan.