问题描述
我编写了这段代码,以从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 (将#修改为@)