.net多线程计算hash值的问题

测试环境vs2010 + .net 4.0

 

下面这段代码经常报:“已关闭 Safe handle”或者“哈希不适于在指定状态下使用”错误,请问下是什么原因造成的?

class Program

{

    static void Main(string[] args)

    {

        Parallel.For(0, 100, n =>

        {

            Console.WriteLine(SetMd5("test"));

        });

    }


    private static HashAlgorithm hash = MD5.Create();


    public static String SetMd5(String text)

    {

        //HashAlgorithm hash = MD5.Create();

        Byte[] bytes = hash.ComputeHash(Encoding.UTF8.GetBytes(text));

        return BitConverter.ToString(bytes).Replace("-","");


    }

}


料青山看我应如是
浏览 684回答 2
2回答

手掌心

又是一个线程安全的问题。没线程安全。

茅侃侃

Parallel.For(0, 100, n =>        {            HashAlgorithm hash = MD5.Create();            Byte[] bytes = hash.ComputeHash(Encoding.UTF8.GetBytes("test"));            Console.WriteLine(BitConverter.ToString(bytes).Replace("-",""));        });如果你这么写没有出错的话,那么可以断定 HashAlgorithm 的 ComputeHash 不是线程安全的。因此你的代码在调用同一个HashAlgorithm 实例的 ComputeHash 方法时要考虑互斥问题。
打开App,查看更多内容
随时随地看视频慕课网APP