Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
System.Lazy<T> sınıfı, yavaş başlatma ve nesnelerin örneklemesini gerçekleştirme işini basitleştirir. Nesneleri yavaş bir şekilde başlatarak, hiç ihtiyaç duyulmazsa bunları oluşturmak zorunda kalmaz veya ilk erişilene kadar başlatmalarını erteleyebilirsiniz. Daha fazla bilgi için bkz. Gecikmeli başlatma.
Example 1
Aşağıdaki örnek, Lazy<T>ile bir değerin nasıl başlatılacağı göstermektedir. Lazy değişkenin gerekli olmayabileceğini, someCondition değişkenini true veya false olarak ayarlayan başka bir koda bağlı olarak varsayalım.
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
Aşağıdaki örnek, yalnızca mevcut iş parçacığındaki mevcut nesne örneğine görünür bir türü başlatmak için System.Threading.ThreadLocal<T> sınıfının nasıl kullanılacağını göstermektedir.
// 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