Zum Inhalt springen

Microsoft Async CTP RP1


lilith2k3

Empfohlene Beiträge

Folgender Code ist mit dem neuen Async Framework geschrieben.

Kompiliert wunderbar.

Erwartung:

Meine Anwendung besteht aus einer Textbox und einem Button, welcher nach "onclick" die Webseite Googles lädt und das Result in der Textbox darstellt.

Das geschieht auch.

Aber - und da liegt der Hase im Pfeffer:

geschieht der Aufruf wider erwarten nicht asynchron/nonblocking, sondern die GUI hängt und wartet brav, bis Google geantwortet hat.


namespace AsyncTest
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

public async Task GetGoogle()
{
WebClient webclient = new WebClient();
textBox1.Text=await webclient.DownloadStringTaskAsync(new Uri("http://www.google.de"));

}

async void WaitForTextAndFillTextbox()
{
await GetGoogle();
}

private void button1_Click(object sender, RoutedEventArgs e)
{
WaitForTextAndFillTextbox();
}
}
}
[/php]

Hat jemand eine Idee, warum es nicht so funktioniert, wie erwartet?

Irgendwie stehe ich auf dem Schlauch.

Danke :]

Link zu diesem Kommentar
Auf anderen Seiten teilen

hmm ich hab mich damit noch nicht auseinander gesetzt, sieht auf jeden Fall sehr interessant aus.

Aber vielleicht hat der da irgendwie ein Problem weil du das direkt der TextBox zuweist und klappt dann so:


string text = await webclient.DownloadStringTaskAsync(new Uri("http://www.google.de"));
textBox1.Text=text;
[/PHP]

Ist aber nur ein Schuss ins Blaue und wirklich vorstellen kann ichs mir auch nicht...

Link zu diesem Kommentar
Auf anderen Seiten teilen


namespace AsyncTest
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
WebClient webclient = new WebClient();
public MainWindow()
{
InitializeComponent();
}

private async void button1_Click(object sender, RoutedEventArgs e)
{
string result = await webclient.DownloadStringTaskAsync(textBox2.Text);
textBox1.Text = result;
}
}
}
[/php]

Ich habe es auf das folgende runtergebrochen.

TextBox2 dient quasi als Addressleiste und Textbox1 als Ausgabe.

Starte ich den Aufruf zum ersten mal, blockiert der Aufruf (noch);

ab da an habe ich das Gefühl, dass das Ganze nonblocking läuft ... sehr komisch.

Das kommt drauf an wie der Compiler die Zeile intern genau umbaut damit das plötzlich ansynchron ist.

Eben. Da liegt nämlich der Clou an der ganzen Geschichte:

Es handelt sich um Syntactic Sugar, der einem das ganze Backgroundworker/Thread starten wasauchimmer erleichtern soll.

Lazy Loading trifft es nicht.

Eduasync part 6: using the infrastructure manually - Jon Skeet: Coding Blog <- liefert einen Hinweis, wie der Compiler vorgehen könnte - quasi "re-engineering" (statt "reverse engineering").

Aber merkwürdig ist das Verhalten meiner Anwendung schon.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...