Как дать размер массиву, инициализированному с помощью localthread? - PullRequest
0 голосов
/ 10 мая 2018

Я хочу массив, локальный для потока, и хочу использовать ThreadLocal.Но как мне указать размер массива?

Это невозможно:

class Foo
{
    ThreadLocal<int[]> bar;
    public Foo()
    {
        bar = new ThreadLocal<int[10]>();
    }
}

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Общий аргумент в пределах ThreadLocal указывает тип возвращаемого значения задачи, которая должна быть выполнена.Нет необходимости указывать какой-либо размер, просто верните из него массив:

bar = new ThreadLocal<int[]>(() => new int[10]);

Это так же, как если бы у вас был обычный метод, который возвращал бы массив:

int[] DoSomething()
{
    return new[10] { ... };
}
0 голосов
/ 10 мая 2018

Вы можете использовать конструктор, который использует Func<T> "valueFactory" для его создания:

class Foo
{
    ThreadLocal<int[]> bar;
    public Foo()
    {
        bar = new ThreadLocal<int[]>(() => new int[10]);
    }
}

См. Страницу MSDN для получения дополнительной информации

...