T
RanToCompletion
。
我的用例更为复杂,因为我正在从任何时候打开或关闭的设备(因此不是直接从文件中读取的设备,而是从安全文件句柄中读取;但是结果是相同的在这种情况下和我的实际用例中)。
我想中断(取消)fileStream.readToasync()。我如何以这样的方式进行此操作,以至于它会停止阅读它所处的位置并立即取消?
,最好在这里答案。您需要用
FileOptions.Asynchronous
打开文件。如果您不这样做,则不会实现TRUE取消,并且只有在致电时取消令牌
FileStream
.
。cancellation是最好的 - 仅当实际上可以取消操作时才发生。
will,Cory以前的答案实际上是正确的。当它发生时需要取消,以使其发生。在流读取的情况下,唯一的一点是读取实际上开始。如果流读取请求在飞行中取消,那么您希望流式的任务实际完成时会流?在
Task
的情况下,将其滚回去可能是可以的,但是仅向前的流呢?如果您想在上一个任务过渡到取消状态后立即安排另一个
ReadAsync
您会得到一个丢弃的数据块和可怕的腐败。实际上,这似乎是微软的一部分。使您的缓冲区尺寸较小并在循环中呼叫Position
-然后您将获得所需的取消语义。
这是工作(_stream和_listener是私有字段,初始化为任务):
FileStream