c#在其他线程上执行方法
本文关键字:执行 方法 线程 其他 | 更新日期: 2023-09-27 17:49:59
我有一个方法,读取一些文件,得到哈希SHA1Managed,然后从列表中比较它与其他哈希,我怎么能做这个方法在其他线程?
public bool CheckFile(string file, string filehash)
{
if (File.Exists(file))
{
using (FileStream stream = File.OpenRead(file))
{
SHA1Managed sha = new SHA1Managed();
byte[] checksum = sha.ComputeHash(stream);
string sendCheckSum = BitConverter.ToString(checksum)
.Replace("-", string.Empty);
return sendCheckSum.ToLower() == filehash;
}
}
else return false;
}
如果你只是想在后台线程中运行它,你实际上需要将任务创建向上移动一个级别,因为你的函数返回结果。根据调用代码的工作方式,类似这样的代码可能适合您。
var backgroundTask = Task.Factory.StartNew(() =>
{
var result = CheckFile("file", "filehash");
//do something with the result
});
试试这个代码:
public async Task<bool> CheckFile(string file, string filehash)
{
await Task.Run<bool>(()=> {
if (File.Exists(file))
{
using (FileStream stream = File.OpenRead(file))
{
SHA1Managed sha = new SHA1Managed();
byte[] checksum = sha.ComputeHash(stream);
string sendCheckSum = BitConverter.ToString(checksum)
.Replace("-", string.Empty);
return sendCheckSum.ToLower() == filehash;
}
}
else return false;
});
}