Kurz: 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
Teil des Kurses Visual Basic .NET
Kapitel 6 von 8 im Kurs Visual Basic .NET. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.
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
yxAsync 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
5050Threads 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
5050Merke
- 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
Übungsaufgabe
Berechne mit Task.WhenAll die Quadratzahlen von 1 bis 10 parallel.
Quiz zur Selbstkontrolle
Wofür steht Await?
- Wartet ohne zu blockieren auf das Ergebnis einer Task (richtig)
- Beendet das Programm
- Startet einen neuen Prozess
- Löscht eine Variable
Wofür ist SyncLock?
- Exklusiver Zugriff auf einen Codeabschnitt (richtig)
- Verschlüsselung
- Dateisperre
- Netzwerkzugriff
Was bedeutet (Of T)?
- Typparameter einer generischen Klasse (richtig)
- Ein Operator
- Eine Schleife
- Ein Kommentar
Weiter im Kurs
Zurück: Strings, Dateien, Datum und Fehler
Weiter: Praxisprojekte
Alle Kapitel: Visual Basic .NET im Überblick