Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De System.Lazy<T> klasse vereenvoudigt het werk van het uitvoeren van luie initialisatie en instantiƫring van objecten. Door objecten op een luie manier te initialiseren, kunt u voorkomen dat u ze helemaal hoeft te maken als ze nooit nodig zijn, of u kunt de initialisatie uitstellen totdat ze voor het eerst worden geopend. Voor meer informatie, zie luie initialisatie.
Example 1
In het volgende voorbeeld ziet u hoe u een waarde initialiseert met Lazy<T>. Stel dat de luie variabele mogelijk niet nodig is, afhankelijk van een andere code waarmee de someCondition variabele true wordt ingesteld op of false.
Dim someCondition As Boolean = False
Sub Main()
'Initialize a value with a big computation, computed in parallel.
Dim _data As Lazy(Of Integer) = New Lazy(Of Integer)(Function()
Dim result =
ParallelEnumerable.Range(0, 1000).
Aggregate(Function(x, y)
Return x + y
End Function)
Return result
End Function)
' Do work that might or might not set someCondition to True...
' Initialize the data only if needed.
If someCondition = True Then
If (_data.Value > 100) Then
Console.WriteLine("Good data")
End If
End If
End Sub
static bool someCondition = false;
// Initialize a value with a big computation, computed in parallel.
Lazy<int> _data = new Lazy<int>(delegate
{
return ParallelEnumerable.Range(0, 1000).
Select(i => Compute(i)).Aggregate((x,y) => x + y);
}, LazyThreadSafetyMode.ExecutionAndPublication);
// Do some work that might or might not set someCondition to true...
// Initialize the data only if necessary.
if (someCondition)
{
if (_data.Value > 100)
{
Console.WriteLine("Good data");
}
}
Example 2
In het volgende voorbeeld ziet u hoe u de System.Threading.ThreadLocal<T>-klasse gebruikt om een type te initialiseren dat alleen zichtbaar is voor het huidige objectexemplaren in de huidige thread.
// Initialize a value per thread, per instance.
ThreadLocal<int[][]> _scratchArrays =
new(InitializeArrays);
static int[][] InitializeArrays() => [new int[10], new int[10]];
// Use the thread-local data.
int i = 8;
int[] tempArr = _scratchArrays.Value[i];
'Initializing a value per thread, per instance
Dim _scratchArrays =
New ThreadLocal(Of Integer()())(Function() InitializeArrays())
' use the thread-local data
Dim tempArr As Integer() = _scratchArrays.Value(i)
' ...
End Sub
Function InitializeArrays() As Integer()()
Dim result(10)() As Integer
' Initialize the arrays on the current thread.
' ...
Return result
End Function