我需要计算两个大文件(大约 10GB)的哈希值来检查是否相等。目前,我一次计算一个哈希值,但为了节省大量时间,我想到了同时并行计算两个哈希值。 这是我的方法:
private bool checkEquality(FileInfo firstFile, FileInfo secondFile)
{
//These 2 lines are for creating one hash at a time, currently commented out for
//testing purpose
//byte[] firstHash = createHash(firstFile);
//byte[] secondHash = createHash(secondFile);
//My take in running the computing processes parallely
Task<byte[]> fh = Task.Run(() => createHash(firstFile));
Task<byte[]> sh = Task.Run(() => createHash(secondFile));
byte[] firstHash = fh.Result;
byte[] secondHash = sh.Result;
for (int i = 0; i < firstHash.Length; i++)
{
if (firstHash[i] != secondHash[i]) return false;
}
return true;
}
由于这是我第一次尝试做这样的事情,所以我不太确定我编写的代码是否按照我的想象工作,因为我已经看到通常将异步方法与await关键字结合使用其他线程,但我还无法理解这个概念。
编辑: 好的,我将方法更改为:
private async Task<bool> checkEquality(FileInfo firstFile, FileInfo secondFile)
{
//These 2 lines are for creating one hash at a time, currently commented out for
//testing purpose
//byte[] firstHash = createHash(firstFile);
//byte[] secondHash = createHash(secondFile);
//My take in running the computing processes parallely
Task<byte[]> fh = Task.Run(() => createHash(firstFile));
Task<byte[]> sh = Task.Run(() => createHash(secondFile));
byte[] firstHash = await fh;
byte[] secondHash = await sh;
for (int i = 0; i < firstHash.Length; i++)
{
if (firstHash[i] != secondHash[i]) return false;
}
return true;
}
这是同时异步运行两个计算进程的工作方式吗?
最佳答案
您可以使用 Task.WhenAll
运行这两个任务并等待它们完成。
var result = await Task.WhenAll(fh, sh);
byte[] firstHash = result[0];
byte[] secondHash = result[1];
关于c# - 在 C# 中并行运行两个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75258349/