Visual Studio Async CTP
Ein weiterer Bericht von der Basta Spring.
Diese Library gibt euch ein Vorgeschmack, auf das was in der nächsten Version des Framework kommen wird.
Die bisherigen Möglichkeiten einen Asyncronen Aufruf durchzuführen, ist mit den heutigen Mitteln zwar nicht besonders schwierig, jedoch schrecken manche Entwickler immer noch davor davor zurück, einen Vorgang asyncron durchzuführen.
Warum sollte ich Vorgänge asyncron durchführen?
Bei einem Vorgang der nur wenige Millisekunden dauert, muss ich den Vorgang nicht zwangsläufig asyncron durchführen, jedoch sobald der Vorgang länger dauert oder nicht abzusehen ist wie lang der jeweilige Vorgang dauern könnte, sollte man es machen.
Den Fakt ist, das User Interface sollte auch während einer länger laufenden Aktion, immer bedienbar bleiben!! den so ein Dialog verstärkt das Vertrauen eines Users nicht wirklich!
Wie funktioniert das ganze
Beispiel ohne Library am Beispiel des WebClient NS: System.Net
static void Main(string[] args)
{
string url = "http://www.Microsoft.de";
var client = new WebClient();
client.DownloadDataCompleted += client_DownloadDataCompleted;
client.DownloadDataAsync(new Uri(url));
//an dieser Stelle sind noch keine daten vorhanden
Console.ReadLine();
Console.WriteLine("<END>");
}
static void client_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
//jetzt kommen die Daten
string strData = Encoding.Default.GetString(e.Result);
Console.WriteLine(strData);
}
<pre>
Durch diese paar Zeilen Code würde die UI während des Herunterladen immer zugreifbar bleiben.
Beispiel mit Library
<span class="lnum"></span>
static void Main(string[] args)
{
DownloadData();
//an dieser Stelle sind noch keine daten vorhanden
Console.ReadLine();
Console.WriteLine("<END>");
}
private async static void DownloadData()
{
string url = "http://www.Microsoft.de";
var client = new WebClient();
//Zeile 16
string strData = await client.DownloadDataAsync(new Uri(url));
Console.WriteLine(strData);
}
An diesem Beispiel erkennen wir, das wir durch die beiden neuen Schlüsselwörter
async und Await das gleiche Ergebnis erreichen können.
Nur der Code sieht viel schöner aus!
Ja jetzt höre ich euch schon, was erreichen wir damit der Code bleibt an der Zeile 16
doch stehen bis er fertig ist, jedoch so ist es nicht.
Das Programm läuft genau so wie im ersten Beispiel.
DownloadData() wird bis zur Zeile 16 Ausgeführt und das Schlüsselwort Async bewirkt, dass das Programm
in der Main Methode solange Fortgesetzt wird bis die Daten heruntergeladen wurden.
Sobald die Daten vorliegen, läuft das Programm dann ab Zeile 16 weiter.
Link: Visual Studio Async CTP