Version 4 (V4) von AWS SDK für .NET wurde veröffentlicht!
Informationen zu wichtigen Änderungen und zur Migration Ihrer Anwendungen finden Sie im Thema https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html Migration.
Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Asynchron programmieren mit dem AWS SDK für .NET
Der AWS SDK für .NET verwendet das Task-based Asynchronous Pattern (TAP) für seine asynchrone Implementierung. Weitere Informationen zum TAP finden Sie unter Task-based Asynchronous Pattern (TAP) auf docs.microsoft.com.
Dieses Thema gibt Ihnen einen Überblick darüber, wie Sie TAP bei Ihren Anrufen an Servicekunden verwenden können. AWS
Die asynchronen Methoden in der AWS SDK für .NET API sind Operationen, die auf der Task Klasse oder der Task<TResult> Klasse basieren. <TResult>Informationen zu diesen Klassen finden Sie auf docs.microsoft.com: Aufgabenklasse, Aufgabenklasse.
Wenn diese API-Methoden in Ihrem Code aufgerufen werden, müssen sie innerhalb einer Funktion aufgerufen werden, die mit dem async Schlüsselwort deklariert ist, wie im folgenden Beispiel gezeigt.
static async Task Main(string[] args) { ... // Call the function that contains the asynchronous API method. // Could also call the asynchronous API method directly from Main // because Main is declared async var response = await ListBucketsAsync(); Console.WriteLine($"Number of buckets: {response.Buckets.Count}"); ... } // Async method to get a list of Amazon S3 buckets. private static async Task<ListBucketsResponse> ListBucketsAsync() { ... var response = await s3Client.ListBucketsAsync(); return response; }
Wie im vorherigen Codeausschnitt gezeigt, ist der bevorzugte Gültigkeitsbereich für die async Deklaration die Main Funktion. Durch die Festlegung dieses async Bereichs wird sichergestellt, dass alle Aufrufe von AWS
Service-Clients asynchron sein müssen. Wenn Sie aus irgendeinem Grund nicht als asynchron deklarieren Main können, können Sie das async Schlüsselwort für andere Funktionen verwenden Main und dann die API-Methoden von dort aus aufrufen, wie im folgenden Beispiel gezeigt.
static void Main(string[] args) { ... Task<ListBucketsResponse> response = ListBucketsAsync(); Console.WriteLine($"Number of buckets: {response.Result.Buckets.Count}"); ... } // Async method to get a list of Amazon S3 buckets. private static async Task<ListBucketsResponse> ListBucketsAsync() { ... var response = await s3Client.ListBucketsAsync(); return response; }
Beachten Sie die spezielle Task<> Syntax, die Main bei der Verwendung dieses Musters erforderlich ist. Darüber hinaus müssen Sie das Result Element der Antwort verwenden, um die Daten abzurufen.
Warnung
Das Blockieren bei einem asynchronen Anruf mitResult,Wait(), oder GetAwaiter().GetResult() ist ein Sync-over-Async-Muster. Dies ist nur in einer einfachen Konsole zulässig, die keine hat. Main SynchronizationContext InASP.NET, Windows FormsWPF, und kann dieses Muster dazu Blazor WebAssembly führen, dass der Threadpool ausgehungert oder ein Deadlock entsteht. Bei beiden Ergebnissen bleibt Ihre Anwendung hängen. Deklarieren Sie lieber Main als async und verwenden Sie await es, wie im ersten Beispiel gezeigt. Details hierzu finden Sie unter async/await Richtig verwenden.
Vollständige Beispiele für asynchrone Aufrufe von AWS Service-Clients finden Sie im Erstellen einer einfachen Anwendung Abschnitt (Einfache plattformübergreifende AppundEinfache Windows-basierte App) und in. Geführte Codebeispiele