C# 使用下一个字节时为空字节数组
假设我有以下代码:C# 使用下一个字节时为空字节数组,c#,random,.net-core,C#,Random,.net Core,假设我有以下代码: public sealed class SimpleRandomProvider : IRandomProvider { private static readonly Lazy<Random> RandomHolder = new Lazy<Random>(() => new Random()); public void NextBytes(byte[] buffer) { RandomHolder.V
public sealed class SimpleRandomProvider : IRandomProvider
{
private static readonly Lazy<Random> RandomHolder = new Lazy<Random>(() => new Random());
public void NextBytes(byte[] buffer)
{
RandomHolder.Value.NextBytes(buffer);
}
}
它用于在指定的maxExclusive
下生成biginger
。
代码段avoid在开始生成填充了零的缓冲区(在单元测试运行期间)之前被调用100-200次
编辑:
您可以下载我的项目:
-然后运行测试-它应该失败,因为只有在缓冲区为空时才会引发InvalidOperationException
当测试一个接一个地运行时。但运行它们都会导致异常。事实证明,多线程访问下一个字节是一个问题:
private static readonly Lazy<Random> RandomHolder = new Lazy<Random>(() => new Random());
private static readonly object Access = new object();
public void NextBytes(byte[] buffer)
{
lock (Acces)
RandomHolder.Value.NextBytes(buffer);
}
private static readonly Lazy RandomHolder=new Lazy(()=>new Random());
私有静态只读对象访问=新对象();
public void NextBytes(字节[]缓冲区)
{
锁定(访问)
RandomHolder.Value.NextBytes(缓冲区);
}
事实证明,多线程访问下一个字节是个问题:
private static readonly Lazy<Random> RandomHolder = new Lazy<Random>(() => new Random());
private static readonly object Access = new object();
public void NextBytes(byte[] buffer)
{
lock (Acces)
RandomHolder.Value.NextBytes(buffer);
}
private static readonly Lazy RandomHolder=new Lazy(()=>new Random());
私有静态只读对象访问=新对象();
public void NextBytes(字节[]缓冲区)
{
锁定(访问)
RandomHolder.Value.NextBytes(缓冲区);
}
尝试以其他方式显示此字节数组的内容,例如手动将其转换为字符串或其他内容,然后进行检查。调试器可视化工具本身有一些bug,这可能是其中之一。你的代码对我来说运行良好。你可以添加调用者代码吗?字节
是一个普通数组,没什么特别的吗?@GuruStron yep。我现在正在尝试创建一个单独的项目,用最少的设置来重现这个问题。尝试用其他方式显示这个字节数组的内容,比如手动将它转换成字符串或其他东西,然后检查它。调试器可视化工具本身有一些bug,这可能是其中之一。你的代码对我来说运行良好。你可以添加调用者代码吗?字节
是一个普通数组,没什么特别的吗?@GuruStron yep。我现在正在尝试创建一个单独的项目,用最少的设置来重现这个问题。