从多个文件中读取所有字节

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

我正在尝试使用 ReadAllBytesAsync 读取多个二进制文件。为什么带有 Task.Run() 的版本(如下所示)的速度几乎是没有的版本的两倍。我期待 ReadAll1 方法与 ReadAll2 等效。

test2.bin 是 test1.bin 的副本(每个大约 100 MB)

方法 平均 错误 标准差 已分配
ReadAll1 81.57 毫秒 1.385 毫秒 1.942 毫秒 199.37 MB
ReadAll2 44.55 毫秒 1.041 毫秒 3.021 毫秒 199.37 MB
public static async Task ReadAll1()
{
    var tasks = new List<Task>();
    tasks.Add(File.ReadAllBytesAsync(@"test1.bin"));
    tasks.Add(File.ReadAllBytesAsync(@"test2.bin"));
    await Task.WhenAll(tasks);
}
public static async Task ReadAll2()
{
    var tasks = new List<Task>();
    tasks.Add(Task.Run(() => File.ReadAllBytesAsync(@"test1.bin")));
    tasks.Add(Task.Run(() => File.ReadAllBytesAsync(@"test2.bin")));
    await Task.WhenAll(tasks);
}
c# task-parallel-library
1个回答
0
投票

在你的第二个版本中,你正在安排你的任务在线程池上运行,可能会导致并行执行。而第一个版本可能在同一个线程上执行。您可以通过查看 Task.Run 函数中的

Thread.CurrentThread.ManagedThreadId
来验证它。

© www.soinside.com 2019 - 2024. All rights reserved.