Neuigkeiten in der .NET-Klassenbibliothek, Teil 9: Asynchrone Methoden für Netzwerkzugriffe

Der neunte Beitrag der Artikelserie zu den nicht so bekannten Neuerungen der .NET-Klassenbibliothek behandelt asynchrone Methoden für Netzwerkzugriffe.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 3 Min.
Von
  • Dr. Holger Schwichtenberg

Die Version 4.5 der .NET-Framework-Klassenbibliothek enthält 947 neue Klassen. Eine Artikelserie stellt zehn Neuerungen vor, die nicht die großen Bibliotheken betreffen und daher nicht so im Licht der Öffentlichkeit stehen. Nachdem zuletzt die Standardspracheinstellung für Threads vorgestellt wurden, geht es heute in Teil 9 um asynchrone Methoden für Netzwerkzugriffe.

Auch für die Netzwerkprogrammierung hat Microsoft in .NET 4.5 neue asynchrone Methoden für die taskorientierte asynchrone Ausführung eingeführt. Bei den bestehenden Klassen hat Microsoft die Klasse System.Net.Webclient um folgende Methoden erweitert:

  • OpenReadTaskAsync()
  • OpenWriteStringTaskAsync()
  • DownloadDataTaskAsync()
  • DownloadFileTaskAsync()
  • DownloadStringTaskAsync()
  • UploadDataTaskAsync()
  • UploadFileTaskAsync()
  • UploadStringTaskAsync()
  • UploadValuesTaskAsync()
WebClient DownloadStringAsync() DownloadStringCompleted()
  public static void Run()
{
Console.WriteLine("Run() #1: Thread=" +
System.Threading.Thread.CurrentThread.ManagedThreadId);
GetAsync();
Console.WriteLine("Run() #2: Thread=" +
System.Threading.Thread.CurrentThread.ManagedThreadId);
}

/// <summary>
/// Diese Methode startet das asynchrone Herunterladen
/// </summary>
/// <returns></returns>
public async static Task<string> GetAsync()
{
List<string> urls = new List<string>() { "http://www.IT-Visions.de",
"http://www.dotnetframework.de", "http://www.winrt.de",
"http://www.dotnet-akademie.de" };
string inhalt = "";
using (var wc = new System.Net.WebClient())
{
foreach (string url in urls)
{
inhalt = await wc.DownloadStringTaskAsync(url); // Hier wird die
// Kontrolle an den Aufrufer gegeben
// Download erfolgt in eigenem Thread
// Der Rest der Methode wird auch in eigenem Thread abgearbeitet
Console.WriteLine("GetAsync(): Thread=" +
System.Threading.Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("GetAsync(): Länge des Inhalts von " + url
+ "=" + inhalt.Length);
}
}
return inhalt;
}

Neben den Erweiterungen für die Klasse System.Net.WebClient gibt es noch eine neue Klasse System.Net.Http.HttpClient. Microsoft nennt auf fünf Argumente, warum die neue Klasse besser sei als die alte. Allerdings sind diese nicht schlüssig, da man auch von WebClient erben und viele Anfragen gleichzeitig verwalten kann und ebenso nun auch asynchrone Methoden mit dem neuen Task-Entwurfsmuster unterstützt.

Die Existenz einer eigenen Klasse HttpClient ist wohl wieder mal eher "chaotische" Entscheidung. Diese Klasse entstammt dem ASP.NET-Web-API-Projekt und wurde dann ins .NET Framework aufgenommen. ()