LazyThreadSafetyMode Enumeração
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Especifica como uma instância Lazy<T> sincroniza o acesso entre vários threads.
public enum class LazyThreadSafetyMode
public enum LazyThreadSafetyMode
type LazyThreadSafetyMode =
Public Enum LazyThreadSafetyMode
- Herança
Campos
| ExecutionAndPublication | 2 | Os bloqueios são usados para garantir que apenas um único thread possa inicializar uma instância Lazy<T> de uma forma thread-safe. Efetivamente, o método de inicialização é executado de maneira thread-safe (conhecido como |
| None | 0 | A instância Lazy<T> não é segura para thread; se a instância é acessada de vários threads, seu comportamento é indefinido. Use esse modo apenas quando o alto desempenho é fundamental e é garantido que a instância Lazy<T> nunca será inicializada de mais de um thread. Se você usar um construtor Lazy<T> que especifica um método de inicialização (parâmetro |
| PublicationOnly | 1 | Quando vários threads tentam inicializar uma instância Lazy<T> simultaneamente, todos os threads têm permissão para executar o método de inicialização (ou o construtor sem parâmetros caso não haja nenhum método de inicialização). O primeiro thread para concluir a inicialização define o valor da instância de Lazy<T>. Isso é conhecido como |
Comentários
Use essa enumeração para especificar o mode parâmetro de Lazy<T> construtores. Os efeitos de todos os construtores na sincronização de threads podem ser descritos em termos dessa enumeração, independentemente de terem mode ou não parâmetros.
Uma Lazy<T> instância é inicializada por um método de inicialização especificado pelo usuário ou pelo construtor sem parâmetros para T. O método de inicialização é especificado pelo valueFactory parâmetro de um Lazy<T> construtor. O método retorna uma instância de T, que é o tipo que é preguiçosamente instanciado pela instância de Lazy<T>. Se um construtor não tiver um valueFactory parâmetro, o construtor sem parâmetros será T usado para inicializar a Lazy<T> instância. Em ambos os casos, a inicialização ocorre na primeira vez que você chama a Lazy<T>.Value propriedade.
Além de especificar a segurança do thread de uma Lazy<T> instância, essa enumeração afeta o cache de exceção. Quando as exceções são armazenadas em cache para uma Lazy<T> instância, você tem apenas uma chance de inicializar a instância. Se uma exceção for lançada na primeira vez que você chamar a Lazy<T>.Value propriedade, essa exceção será armazenada em cache e relançada em todas as chamadas subsequentes para a Lazy<T>.Value propriedade. A vantagem das exceções de cache é que todos os dois threads sempre obtêm o mesmo resultado, mesmo quando ocorrem erros.
Quando você especifica o modo PublicationOnly, as exceções nunca são armazenadas em cache. Quando você especifica None ou ExecutionAndPublication, o cache depende de você especificar um método de inicialização ou permitir que o construtor sem parâmetros seja T usado. Especificar um método de inicialização permite o cache de exceções para esses dois modos. O método de inicialização pode ser muito simples. Por exemplo, ele pode chamar o construtor sem parâmetros para T: new Lazy<Contents>(() => new Contents(), mode) em C#ou New Lazy(Of Contents)(Function() New Contents()) em Visual Basic. Se você usar um construtor que não especifique um método de inicialização, as exceções geradas pelo construtor sem parâmetros não T serão armazenadas em cache. A tabela a seguir resume o comportamento de cache de exceção.
| Modo | Usando o método de inicialização | Usando o construtor sem parâmetros para T |
|---|---|---|
| Nenhum | Armazenado em cache | Não armazenado em cache |
| PublicationOnly | Não armazenado em cache | Não armazenado em cache |
| Executionandpublication | Armazenado em cache | Não armazenado em cache |