Anhang B. Erkennen und Interpretieren von asynchronen Mustern
Die Vorteile von asynchronem Code waren schon Jahrzehnte vor der Erfindung von .NET bekannt. In den Anfängen von .NET wurden verschiedene Arten von asynchronem Code entwickelt, hier und da verwendet und schließlich wieder verworfen. Das waren nicht alles schlechte Ideen; viele von ihnen ebneten den Weg für den modernen async
/await
Ansatz. Dennoch gibt es noch eine Menge Legacy-Code, der ältere asynchrone Muster verwendet. In diesem Anhang werden die gängigsten Muster besprochen und erklärt, wie sie funktionieren und wie sie in modernen Code integriert werden können.
Manchmal wird derselbe Typ im Laufe der Jahre aktualisiert und erhält mehr und mehr Mitglieder, da er mehrere asynchrone Muster unterstützt. Das vielleicht beste Beispiel dafür ist die Klasse Socket
. Hier sind einige der Mitglieder der Klasse Socket
für den Kernvorgang Send
:
class
Socket
{
// Synchronous
public
int
Send
(
byte
[]
buffer
,
int
offset
,
int
size
,
SocketFlags
flags
);
// APM
public
IAsyncResult
BeginSend
(
byte
[]
buffer
,
int
offset
,
int
size
,
SocketFlags
flags
,
AsyncCallback
callback
,
object
state
);
public
int
EndSend
(
IAsyncResult
result
);
// Custom, very close to APM
public
IAsyncResult
BeginSend
(
byte
[]
buffer
,
int
offset
,
int
size
,
SocketFlags
flags
,
out
SocketError
error
,
AsyncCallback
callback
,
object
state
);
public
int
EndSend
(
IAsyncResult
result
,
out
SocketError
error
);
// Custom
public
bool
SendAsync
(
SocketAsyncEventArgs
e
);
// TAP (as an extension ...
Get Concurrency in C# Cookbook, 2. Auflage now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.