使用C#ReadAsync方法的USB HID通信似乎无法取消

使用C#ReadAsync方法的USB HID通信似乎无法取消,c#,asynchronous,usb,hid,C#,Asynchronous,Usb,Hid,我有一个C#应用程序,它使用HID类通过USB与设备通信 要从设备读取,我使用ReadAsync函数和超时取消令牌,基于Jan的Axelson代码- 请显示OnReadTimeout的代码大多数基于文件的Win32 I/O API的约定是在关闭该句柄时取消任何未完成的读/写操作。然而,好吧,系统中没有任何东西可以强制这样做。所以我想说最好的人是问C#库或设备驱动程序作者。你确定它没有取消吗?等待一个被取消的任务应该抛出一个错误,这可以解释为什么readCTS.Dispose()断点从未被命中。@

我有一个C#应用程序,它使用HID类通过USB与设备通信

要从设备读取,我使用ReadAsync函数和超时取消令牌,基于Jan的Axelson代码-


请显示
OnReadTimeout
的代码大多数基于
文件的Win32 I/O API的约定是在关闭该句柄时取消任何未完成的读/写操作。然而,好吧,系统中没有任何东西可以强制这样做。所以我想说最好的人是问C#库或设备驱动程序作者。你确定它没有取消吗?等待一个被取消的任务应该抛出一个错误,这可以解释为什么readCTS.Dispose()断点从未被命中。@马克:我不是一个经验丰富的C#程序员。据我所知,如果我没有捕获异常,当它们发生时,它们应该中断软件并显示windows错误消息,不是吗?嗯,我在运行此代码时没有收到任何异常错误消息。
            _transferInProgress = true;

            readCTS = new CancellationTokenSource();

            Action onReadTimeoutAction = OnReadTimeout;

            readCTS.CancelAfter(timeout);

            readCTS.Token.Register(onReadTimeoutAction);

            Task<Int32> t = _deviceData.ReadAsync(inputReportBuffer, 0, inputReportBuffer.Length, readCTS.Token);
            bytesRead = await t;

            readCTS.Dispose();

            _transferInProgress = false;

            return bytesRead;
private void OnReadTimeout()
    {
        _transferInProgress = false;
        _deviceData.Close();
    }