C#Asynchrone Strukturfunktion: Machbarkeit untersuchen
Im Programm der Programmierung spielt der Konstruktor eine wichtige Rolle bei der Initialisierung des Zustands des Objekts, wenn das Objekt erstellt wird. Bei der asynchronen Programmierung trat jedoch ein häufiges Problem auf: Kann der Konstruktor asynchron sein?
Der Grund für die asynchrone Strukturfunktion
In einigen Fällen können asynchrone Operationen verwendet werden, um die Daten im Konstruktor zu füllen. Betrachten Sie das folgende Beispiel:
In diesem Beispiel soll der Konstruktor Daten asynchron erhalten, wenn das Objekt erstellt wird. Der C#Compiler erzeugt jedoch einen Fehler und weist darauf hin, dass der "Async" -Modifikator nicht im Konstruktor verwendet werden darf.Warum nicht die Verwendung des asynchronen Konstruktors
<code class="language-c#">public class ViewModel { public ObservableCollection<tdata> Data { get; set; } // 异步构造函数(无效语法) async public ViewModel() { Data = await GetDataTask(); } }</code>
zulassen
Obwohl die asynchrone Strukturfunktion sehr attraktiv ist, gibt es einen grundlegenden Grund für sie, in C#nicht unterstützt zu werden:Thread -Sicherheit:
Die konstruktive Funktion muss die Sicherheit des Threads sicherstellen und sicherstellen, dass sie gleichzeitig erstellt werden kann, ohne Datenschäden zu verursachen. Asynchrone Operationen führen jedoch die Möglichkeit von Wettbewerbsbedingungen ein, die die Sicherheit der Fäden gefährden.Initialisierungsreihenfolge:
Verzögerungsinitialisierung:
Sie können Daten asynchron asynchron auf verzögerte Weise erhalten.Das obige ist der detaillierte Inhalt vonSind asynchronisierte Konstruktoren in C#machbar und warum oder warum nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!