Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用下一个字节时为空字节数组_C#_Random_.net Core - Fatal编程技术网

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。我现在正在尝试创建一个单独的项目,用最少的设置来重现这个问题。