Локальная память потока сохраняется между backgroundworker вызовами?

Вас может смущать сообщение об ошибке

тип получателя не соответствует типу включающего класса

blockquote>

Согласно другим ответам, вы не должны Я не могу использовать this в качестве параметра (или объявить его как новую переменную), но в сообщении об ошибке говорится что-то совершенно другое.

Фактически, вы можете использовать this в качестве параметра, но только в одном месте: как параметр приемника .

Параметр приемника является необязательным синтаксическим устройством для метода экземпляра или конструктора внутреннего класса. Для метода экземпляра параметр получателя представляет объект, для которого вызывается метод. Для конструктора внутреннего класса параметр получателя представляет непосредственно включающий экземпляр вновь созданного объекта. В обоих случаях параметр получателя существует исключительно для того, чтобы позволить типу представляемого объекта быть обозначенным в исходном коде, так что этот тип может быть аннотирован (§9.7.4) . Параметр получателя не является формальным параметром; точнее, это не объявление какой-либо переменной (§4.12.3), оно никогда не привязывается ни к какому значению, переданному в качестве аргумента в выражении вызова метода или выражении создания экземпляра класса, и оно не имеет никакого эффекта во время выполнения.

blockquote>

На практике это выглядело бы как

class ThisDemo
{
    void show(@Special ThisDemo this)
    {
        System.out.println(this);
    }
}

. Затем можно извлечь аннотацию @Special с помощью средств обычного отражения.

13
задан Ed Guiness 18 February 2009 в 15:51
поделиться

2 ответа

Когда пул потоков повторно использует поток, он не очищает данные в локальном хранилище потока или в полях, отмеченных атрибутом ThreadStaticAttribute. Следовательно, данные, помещенные в локальное хранилище потока одним методом, могут быть доступны любому другому методу, который выполняется тем же потоком пула потоков. Метод, который обращается к полю, помеченному атрибутом ThreadStaticAttribute, может обнаруживать разные данные в зависимости от того, какой поток пула потоков его выполняет.

источник: http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx

https://docs.microsoft.com/en-us/dotnet/api/system.threading .threadpool? redirectedfrom = MSDN & view = netframework-4.8 # примечания

10
ответ дан 2 December 2019 в 01:32
поделиться

Должен был бы проверить источник (или через Отражатель) для определения этого, если он не указан в MSDN.

Если это не указано, Вы не можете полагаться на текущее поведение, не изменяющееся в будущей версии.NET.

Править: Похож на него, использует пул потоков, таким образом, потоки будут снова использованы.

-1
ответ дан 2 December 2019 в 01:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: