You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于File.ReadAllBytesAsync无法被取消的技术问题求助

File.ReadAllBytesAsync取消操作未生效的问题

我发现File.ReadAllBytesAsync的行为存在异常:当取消该方法返回的任务时,它仍会继续运行直至读取完整文件。调用测试方法后对比源文件(fileFrom)和目标文件(fileTo)的SHA256,结果完全一致。读取的文件约1GB且位于HDD上,10毫秒内不可能完成读取,显然取消操作未生效。

初始测试代码:

public async void Test(string fileFrom, string fileTo)
{
    CancellationTokenSource source = new CancellationTokenSource();
    Task<byte[]> task = File.ReadAllBytesAsync(fileFrom, source.Token);
    Thread.Sleep(10);
    source.Cancel();
    byte[] bytes = await task;
    Debug.WriteLine(bytes.Length.ToString());
    File.WriteAllBytes(fileTo, bytes);
}

编辑补充

@Panagiotis Kanavos指出上述代码存在若干问题,我修改后使用近2GB的文件再次测试,结果依然相同。新版本演示代码输出内容为Test: 16264 ms, 2146435071 Bytes.:

修改后的测试代码:

public async Task Test(string fileFrom, string fileTo)
{
    CancellationTokenSource source = new CancellationTokenSource(20);
    Task<byte[]> task = File.ReadAllBytesAsync(fileFrom, source.Token);
    Stopwatch watch = Stopwatch.StartNew();
    byte[] bytes = await task;
    watch.Stop();
    Debug.WriteLine($"Test: {watch.ElapsedMilliseconds} ms, {bytes.Length} Bytes.");
    File.WriteAllBytes(fileTo, bytes);
}

内容的提问来源于stack exchange,提问作者AlpacaMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:05:23