测试环境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("-",""); } }
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 方法时要考虑互斥问题。
楼主,最终是怎么解决的啊?