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;
    }

c#在其他线程上执行方法

如果你只是想在后台线程中运行它,你实际上需要将任务创建向上移动一个级别,因为你的函数返回结果。根据调用代码的工作方式,类似这样的代码可能适合您。

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;
     });
}