我如何取消fileStream.ReadAsync(...)请求? cvive以下内容: 使用系统; 使用System.io; 使用System.Threading; 使用system.threading.tasks; 命名空间取消ASYNCFILEREADFAILURE { 班级程序{ 静态空隙主(st ...

问题描述 投票:0回答:2

T

将完成并返回
RanToCompletion

我的用例更为复杂,因为我正在从任何时候打开或关闭的设备(因此不是直接从文件中读取的设备,而是从安全文件句柄中读取;但是结果是相同的在这种情况下和我的实际用例中)。

我想中断(取消)fileStream.readToasync()。

我如何以这样的方式进行此操作,以至于它会停止阅读它所处的位置并立即取消?
,最好在这里答案。

您需要用

FileOptions.Asynchronous

打开文件。如果您不这样做,则不会实现TRUE取消,并且只有在致电时取消令牌

FileStream

.

cancellation是最好的 - 仅当实际上可以取消操作时才发生。
c# asynchronous async-await filestream cancellationtokensource
2个回答
3
投票

will,Cory以前的答案实际上是正确的。当它发生时需要取消,以使其发生。在流读取的情况下,唯一的一点是读取实际上开始。如果流读取请求在飞行中取消,那么您希望流式的任务实际完成时会流?在

Task

的情况下,将其滚回去可能是可以的,但是仅向前的流呢?如果您想在上一个任务过渡到取消状态后立即安排另一个

ReadAsync
您会得到一个丢弃的数据块和可怕的腐败。实际上,这似乎是微软的一部分。使您的缓冲区尺寸较小并在循环中呼叫
Position
-然后您将获得所需的取消语义。

这是工作(_stream和_listener是私有字段,初始化为任务):

FileStream

1
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.