Generics
Public Class Kiste(Of T)
Public Property Inhalt As T
Public Sub New(inhalt As T)
Me.Inhalt = inhalt
End Sub
Public Function Zeige() As String
Return $"Kiste mit {Inhalt}"
End Function
End Class
Module Program
Function Groesster(Of T As IComparable(Of T))(liste As T()) As T
Dim m As T = liste(0)
For Each x In liste
If x.CompareTo(m) > 0 Then m = x
Next
Return m
End Function
Sub Tausche(Of T)(ByRef a As T, ByRef b As T)
Dim tmp As T = a
a = b
b = tmp
End Sub
Sub Main()
Console.WriteLine(New Kiste(Of Integer)(42).Zeige())
Console.WriteLine(New Kiste(Of String)("Text").Zeige())
Console.WriteLine(Groesster({3, 9, 4}))
Console.WriteLine(Groesster({"b", "z", "a"}))
Dim a As String = "x", b As String = "y"
Tausche(a, b)
Console.WriteLine(a & b)
End Sub
End ModuleAusgabe
Kiste mit 42 Kiste mit Text 9 z yx
Async und Await
Imports System.Threading.Tasks
Module Program
Async Function BerechneAsync(n As Integer) As Task(Of Integer)
Await Task.Delay(10)
Return n * n
End Function
Async Function HauptAsync() As Task
Dim e1 = Await BerechneAsync(3)
Console.WriteLine(e1)
Dim aufgaben = Enumerable.Range(1, 5).Select(Function(i) BerechneAsync(i)).ToArray()
Dim ergebnisse = Await Task.WhenAll(aufgaben)
Console.WriteLine(String.Join(" ", ergebnisse))
Dim erste = Await Task.WhenAny(BerechneAsync(7), Task.Delay(1000).ContinueWith(Function(t) -1))
Console.WriteLine(Await erste)
End Function
Sub Main()
HauptAsync().GetAwaiter().GetResult()
Dim t = Task.Run(Function() Enumerable.Range(1, 100).Sum())
Console.WriteLine(t.Result)
End Sub
End ModuleAusgabe
9 1 4 9 16 25 49 5050
Threads und Sperren
Imports System.Threading
Module Program
Private zaehler As Integer = 0
Private ReadOnly sperre As New Object()
Sub Zaehle()
For i As Integer = 1 To 1000
SyncLock sperre
zaehler += 1
End SyncLock
Next
End Sub
Sub Main()
Dim threads As New List(Of Thread)
For i As Integer = 1 To 4
Dim t As New Thread(AddressOf Zaehle)
threads.Add(t)
t.Start()
Next
For Each t In threads
t.Join()
Next
Console.WriteLine(zaehler)
Dim summe As Integer = 0
Parallel.For(1, 101, Sub(i) Interlocked.Add(summe, i))
Console.WriteLine(summe)
End Sub
End ModuleAusgabe
4000 5050
Merke
- Generics:
Class Kiste(Of T),Function F(Of T As IComparable(Of T))(...) Async Function ... As Task(Of T)mitAwait;Task.WhenAllfür Parallelität- Threads,
SyncLockundInterlockedschützen gemeinsamen Zustand Parallel.Forverteilt Arbeit auf mehrere Kerne
Aufgabe
Berechne mit Task.WhenAll die Quadratzahlen von 1 bis 10 parallel.