Heim >Backend-Entwicklung >C++ >Wie kann ich Ausgabeparameter mit asynchronen Methoden in .NET verwenden?

Wie kann ich Ausgabeparameter mit asynchronen Methoden in .NET verwenden?

Susan Sarandon
Susan SarandonOriginal
2025-01-03 05:42:39665Durchsuche

How Can I Use Output Parameters with Asynchronous Methods in .NET?

Asynchronität und Ausgabeparameter: Ein Dilemma

Entwickler stehen oft vor der Notwendigkeit, asynchrone Methoden mit Ausgabeparametern zu schreiben, aber das .NET Framework stellt dies dar eine Herausforderung in dieser Hinsicht.

Die Problem

Der folgende Codeausschnitt veranschaulicht das Problem:

public async void Method1()
{
    int op;
    int result = await GetDataTaskAsync(out op);
}

Dieser Code versucht, eine asynchrone Methode mit einem Ausgabeparameter zu erstellen, aber eine solche Funktion ist in .NET nicht verfügbar Rahmen.

Die Begründung

Laut Lucian Laut Wischik, einem Microsoft-Ingenieur, ergibt sich diese Einschränkung aus der Art und Weise, wie asynchrone Methoden in der CLR implementiert werden. Sie werden vom Compiler in State-Machine-Objekte umgewandelt, denen ein sicherer Mechanismus zum Speichern der Adresse von Out- oder Referenzparametern fehlt.

Workaround

Ein gängiger Workaround besteht darin, dass die asynchrone Methode ein Tupel zurückgibt:

public async Task Method1()
{
    var tuple = await GetDataTaskAsync();
    int op = tuple.Item1;
    int result = tuple.Item2;
}

public async Task<Tuple<int, int>> GetDataTaskAsync()
{
    //...
    return new Tuple<int, int>(1, 2);
}

Dieser Ansatz bietet eine Möglichkeit, mehrere Werte von der asynchronen Methode zurückzugeben, ohne auf out zurückgreifen zu müssen Parameter.

Das obige ist der detaillierte Inhalt vonWie kann ich Ausgabeparameter mit asynchronen Methoden in .NET verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn