其他线程上的C#执行方法

时间:2015-05-20 03:40:42

标签: c# multithreading asynchronous

我有一个方法可以读取一些文件并获取哈希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;

    }

2 个答案:

答案 0 :(得分:4)

如果您只想在后台线程中运行它,您实际上需要将任务创建向上移动一级,因为您的函数返回结果。根据调用代码的工作原理,这样的事情可能对您有用。

var backgroundTask = Task.Factory.StartNew(() =>
{
    var result = CheckFile("file", "filehash");
    //do something with the result
});

答案 1 :(得分:0)

尝试使用此代码:

interface OutputInterface{
    public function load();
}

class ArrayOutput implements OutputInterface{
    public function load()    {
        if (empty ($arrayOfData))
        {
           return null;  //if the $arrayOfData is empty then it will return an empty response i.e null
        }
        return $arrayOfData;
    }
}

class SomeClient{
    private $output;

    public function setOutput(OutputInterface $outputType){
        $this->output = $outputType;
    }

    public function loadOutput(){
        return $this->output->load();
    }
}

$client = new SomeClient();

// Array
$client->setOutput(new ArrayOutput());
$data = $client->loadOutput();