如何解决超时读取FileStream
我编写了这段代码,以从FileStream中读取某些数据并超时:
private CancellationTokenSource RCTS = new CancellationTokenSource();
private int ReadTimeOut = 500;
//...
private byte[] ReadData() //Blocking Method (until operation done or timeout)
{
byte[] Buffer = new byte[ReadSize];
Task<int> ReadTask = FStream.ReadAsync(Buffer,ReadSize,RCTS.Token); //Problem
if (ReadTask.Wait(ReadTimeOut))
{
if (ReadTask.Status == TaskStatus.Canceled) RCTS = new CancellationTokenSource(); //Cancelled manually
return Buffer;
}
RCTS.Cancel();
RCTS = new CancellationTokenSource();
throw new TimeoutException("Read operation timed out.");
}
但是,代码在//Problem
行上停止,直到完成读操作(可用数据足够)为止。所以超时是没有用的。FStream.CanTimeout
是错误的,我不能使用FStream.ReadTimeout
。 FStream
是异步的。
为什么停在那里?它不应该只分配ReadTask
然后在ReadTask.Wait(ReadTimeOut)
上运行吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。