2014-07-24 3 views
5

Lesen C# -Dokumentation, ich frage mich, wie man wissen kann, ob das IO blockiert oder nicht. Zum Beispiel die BinaryWriter.Write-Methode, ich kann keine Informationen in der Dokumentation finden, ob die Methode blockiert.Wie können wir wissen, dass ein IO Blocking oder Non-Blocking ist

+1

Ich denke eine sichere Faustregel besagt, dass Methoden synchron sind, es sei denn, die Dokumente geben ausdrücklich an, dass sie asynchron sind. Ein anderes Muster, das das Framework verwendet, besteht darin, asynchrone Methoden mit "Async" zu versehen oder BeginXXX/EndXXX-Methodenpaare bereitzustellen. –

Antwort

6

BinaryWriter.Write kehrt nur zurück, wenn seine Arbeit abgeschlossen ist. Das macht es blockiert. Die Wartezeit ist möglicherweise unbegrenzt.

Asynchrone Methoden sind normalerweise leicht zu erkennen, da sie Task oder IAsyncResult (entspricht dem alten APM-Muster) zurückgeben. Sie sind auch entsprechend benannt (BeginXxx oder XxxAsync). Wenn eine solche Methode zurückgegeben wird, haben Sie das Ergebnis noch nicht. Das zeigt Ihnen, dass die Berechnung noch nicht abgeschlossen ist.

Die Dokumentation ruft diese Eigenschaft für asynchrone Methoden auf. Da fast alle Methoden blockierend und synchron sind (z. B. alle Zeichenfolgenmethoden), wird dieses Verhalten in den Dokumenten nicht angegeben. Es ist die Standardeinstellung.

1

Da es BeginWrite und seine entsprechenden EndWrite Methoden nicht zur Verfügung stellt, muss es blockiert werden.

Verwandte Themen