Nächstes Usergroup Treffen der .NET Usergroup South Austria in Graz: 31. Mai 2012

Von Gerhard Goeschl Autor Feed 15. May 2012 18:08
Diesmal also mit etwas längerer Vorlaufzeit die Einladung zum nächsten Treffen der .Net Usergroup South Austria: Donnerstag, 31.5.2012 18:00 Uhr #Teil 1: Leichtgewichtige Services und Echtzeit-Szenarien mit REST, Web API und SignalR #Teil2: Mobile Anwendungen für alle Plattformen mit ASP.NET Web API, HTML5 und Java Script Veranstaltungsdetails: Ort: bit Schulungscenter, Kärntner Straße 311, A-8054 Graz Datum und Uhrzeit: Donnerstag, 31. Mai 2012, 18:00 bis 20:00 (danach kann man sich bei gemütlicher Atmosphäre mit Getränken, Knabbergebäck und Brötchen mit Gleichgesinnten zu unterhalten) Referent: Manfred Steyer Preis: natürlich kostenlos  Anmeldungen: bis 29.5.2012 an jgrabner@business-tuning.at Zum Inhalt: # Teil 1: Leichtgewichtige Services und Echtzeit-Szenarien mit REST, Web API und SignalR Egal ob auf mobilen Geräten, in Web-Browsern oder bei Cloud-Services, egal ob auf der Java-Plattform, unter PHP oder .NET: HTTP wird überall unterstützt. Dies ist auch der Grund dafür, warum die REST-Bewegung, die den puren Einsatz von HTTP ohne zusätzliche Protokolle, wie SOAP oder WS-* fordert, in den letzten Jahren zunehmend an Bedeutung gewinnt. In diesem Vortrag erfahren Sie, wie Sie dieser Strömung mit der neuen ASP.NET Web API gerecht werden. Darüber hinaus erfahren Sie, wie Sie Echtzeitszenarien mittels SignalR, einem neuen, durch Einfachheit bestechendem Service-Framework, implementieren können. # Teil 2: Mobile Anwendungen für alle Plattformen mit ASP.NET Web API, HTML5 und Java Script-APIs (31. Mai 2012) Im Dschungel der mobilen Endgeräte gibt es eine Konstante: HTML 5 und JavaScript. Diesen Trend berücksichtigt Microsoft dadurch, dass es künftig sein Web-Framework ASP.NET MVC mit offenen JavaScript-APIs ausliefert. Beachtet dazu auch den Webcast von Andi Schabus zum Thema: Windows 8 Metro Entwicklung: Javascript und HTML5 Im Vortrag der Usergoup erfahrt Ihr anhand von Beispielen, wie Ihr damit offline-fähige Anwendungen, die auf allen mobilen Plattformen laufen, erstellen könnt. Für die mobile GUI kommt jQuery Mobile zum Einsatz; zur Realisierung des UI-Musters 'Model-View-ViewModel' wird knockout.js verwendet. Für die Kommunikation mit dem Server wird die neue ASP.NET Web API herangezogen und Echtzeit-fähigkeit wird mit dem neuen SignalR-Framework realisiert. Für das Offline-Szenario wird darüber hinaus der HMTL 5 Local Storage und der Application Cache bemüht. Zum Referenten: Manfred Steyer Manfred Steyer (softwarearchitekt.at) ist verantwortlich für den Fachbereich "Software Engineering" der Studienrichtung "IT und Wirtschaftsinformatik" an der FH CAMPUS 02 (campus02.at) in Graz und freiberuflicher Trainer und Berater bei IT-Visions (it-visions.de). 2012 erhielt er für seine Tätigkeiten von Microsoft den Status eines Azure Insiders. In seinem aktuellen Buch „Verteilte Systeme und Services mit .NET 4.0: Konzepte und Lösungen mit WCF 4.0“ beschreibt er gemeinsam mit Holger Schwichtenberg den Einsatz von WCF für Unternehmensanwendungen. Auch diesmal wieder: Viel Spaß! tweetmeme_url = 'http://codefest.at/post/2012/05/15/Nachstes-Usergroup-Treffen-der-NET-Usergroup-South-Austria-in-Graz-31-Mai-2012.aspx';

Neues in ASP.NET 4.5 und VS11 Beta

Von Toni Pohl (Gastblogger) Autor Feed 17. April 2012 23:29
Für Entwickler ist jetzt eine unglaublich spannende Zeit. Nicht nur im Web Development werden Technologien wie HTML5, CSS3 und JavaScript immer wichtiger. Für .NET Entwickler ist ASP.NET ist die Basis, auf der Websites aufbauen. Was ist denn jetzt alles Neu in ASP.NET 4.5 und VS11 Beta? [More]

Visual Studio 11 Beta Launch Event–Nachlese (Katapult.me)

Von Andreas Pollak Autor Feed 21. March 2012 13:31
Cool war’s, obwohl mir heiß war *gg* . Am 15. März 2012 fand, im Rahmen der zwei Wochen zuvor bereitgestellten Visual Studio 11 Beta, Katapult.me unser lokaler Visual Studio 11 Beta Launch statt. 154 Teilnehmer und Teilnehmerinnen vor Ort und 50 Online-Gäste waren live dabei als erstmals in Österreich Visual Studio 11 Beta vorgestellt wurde. Wir (Michael Köster, Gerwald Oberleitner und ich) haben uns gefreut euch über die aktuelle Dinge rund um Visual Studio 11 Beta zu informieren. Für die Teilnehmer und Teilnehmerinnen gab es interessante Sessions, farbenfrohe T-Shirts, Bücher und einen Zugang zur TFS Service Preview. Die Slides und auch das Cheat Sheet für die Visual Studio Shortcuts gibt es online zum Download auf der Katapult.04 Website. Wer die Sessions live verpasst hat kann sie sich auf http://katapult.tv ansehen: Was gibt es Neues in Visual Studio 11? Agile Entwicklung mit Visual Studio 11 und TFS 11 Team Zusammenarbeit mit Visual Studio 11 Manuelles und Automatisiertes Testen mit Visual Studio 11 Tipps & Tricks zur effektiveren Nutzung von Visual Studio 11 Carpe Diem – Lebe den Tag – Mit Visual Studio 11 einfach früher nach Hause gehen Viel Spaß mit Visual Studio 11 Beta wünscht euch Andreas Pollak Product Marketing Manager Visual Studio & Expression ACHTUNG – SONDERANGEBOTE – NUR KURZE ZEIT,…

Unterstützung bei der Veröffentlichung Ihrer Windows 8 Apps

Von Andreas Schabus Autor Feed 13. March 2012 18:10
Die Windows 8 App Labs eröffnen Ihnen die einmalige Chance, Ihre App bereits im Windows 8 Beta Store zu veröffentlichen. So können Sie noch vor dem endgültigen Release von Windows 8 Ihre App einer breiten Öffentlichkeit zugänglich machen. Bewerben Sie sich, indem Sie sich bei uns mit einer kurzen Beschreibung ihrer App anmelden – via Mail an Andreas.Schabus@microsoft.com oder Feedbackformular auf codefest.at. Neben der Grundvoraussetzung, dass die App lauffähig ist, werden Teilnehmer anhand der Originalität der App-Idee und der gelungenen Umsetzung des Metro Style für das Windows 8 App Excellence Lab akzeptiert. Im Windows 8 App Excellence Lab helfen Ihnen Windows 8-Experten von Microsoft in Bezug auf UI/UX, Performance-Optimierung sowie technischer Problemlösungen/Debugging Ihrer App den letzten Schliff zu verleihen. Nach Abschluss erhalten Sie die Möglichkeit als einer der ersten Ihre App in den Store zu publizieren. Wir möchten jedem engagierten Entwickler den Zugang zum Windows 8 Beta-Store ermöglichen, bitten aber um Verständnis, dass die Plätze in den Labs leider begrenzt sind. Lernen sie das Potential der Plattform bei einer unserer Veranstaltungen (z.B. dem Microsoft BigDay 2012. http://BigDay2012.at) oder über unsere Web-Seiten - http://dev.windows.com bzw. http://design.windows.com – kennen, überzeugen Sie uns mit Ihrer App und positionieren Sie sich als einer der ersten in einem neu entstehenden Markt.

Live Webcast: Going Native - Visual C++ 11

Von Gerhard Goeschl Autor Feed 7. March 2012 22:35
Nicht vergessen! Am Freitag findet wieder unser wöchentlicher Katapult.TV Webcast statt. Diese Woche wird Euch Andi Schabus in die Welt des "nativen" C++ Codes entführen. Viel Spaß beim Katapult.TV zu Visual C++ 11: Datum: Freitag, 09. März 2012 Zeit: 08:30 – 09:15 Sprecher: Andreas Schabus Ort: kostenloser Live Webcast über Katapult.TV Anmeldung: Über die Katapult.TV Webseite Auch wenn Visual Studio in den letzten beiden Versionen meistens mit .NET in Verbindung gebracht wurde, so ist es doch seit jeher auch eine sehr gute Entwicklungsumgebung um "nativen" C++ Code zu entwickeln. Und das wird sich auch mit Visual Studio 11 nicht ändern - im Gegenteil. Nicht nur, dass der Compiler viele der neuen C++ 11 Features unterstützt, es gibt auch einige neue bzw. verbesserte Werkzeuge, um die Erstellung von qualitativ hochwertigen Code zu vereinfachen. Am besten einfach dazukommen, mitschauen und mitdiskutieren! Ünbrigens: Wer gerne Visual Studio 11 schon heute ausproberen will: Visual Studio 11 Beta - Jetzt herunterladen und testen tweetmeme_url = 'http://codefest.at/post/2012/03/07/Going-Native-Visual-C-2011.aspx';

Windows 8 Consumer Preview & Visual Studio 11 Beta – jetzt downloaden und testen

Von Andreas Schabus Autor Feed 29. February 2012 16:47
Ab HEUTE ist es soweit. Die Windows 8 Consumer Preview wurde im Rahmen des Mobile World Congress 2012 in Barcelona der Öffentlichkeit vorgestellt. Millionen begeisterte Nutzer haben nun die Möglichkeit die wunderbare, neue Welt des Metro-Design mit Windows 8 ausführlich zu testen. Wenn auch Sie unsere Windows 8 Consumer Preview kennenlernen möchten, steht Sie Ihnen unter folgendem Link zum Download bereit: http://preview.windows.com. Entwickler können mit der jetzt ebenfalls bereitgestellten Visual Studio 11 Beta Software für Windows 8 entwickeln. Darüber hinaus finden Sie hier auch jede Menge weitere Informationen zur Windows 8 Consumer Preview. Also jetzt downloaden, testen, Spaß haben und begeistern. Stay tuned & visit the Windows Blog

Visual Studio 11 Beta - Jetzt herunterladen und testen

Von Andreas Pollak Autor Feed 29. February 2012 16:09
Die bereits letzte Woche angekündigte Visual Studio 11 Beta wurde soeben zum Download bereitgestellt. Dank der Unterstützung bestehender Projekte (ohne Konvertierung!) können Sie mittels der "Go-Live" Lizenz Visual Studio 11 bereits jetzt produktiv in ihren Projekten einsetzen und können von den vielen Verbesserungen profitieren. Katapult.me & Visual Studio 11 Beta Launch Stay tuned und erleben Sie mit uns unseren österreichischen Visual Studio 11 Beta Launch Event am 15. März live auf Katapult.TV Am 15.03.2012, ab 10:00 Uhr LIVE auf Katapult.TV. Visual Studio 11 Beta ist nachhaltig und zukunftsorientiert. Visual Studio 11 investiert weiterhin in bereits bestehende Technologien wie Windows Forms, WPF, MFC,… und bietet hier erstklassige Unterstützung. Darüber hinaus bietet Visual Studio die besten Tools für die Entwicklung von Webapplikationen mit HTML 5, CSS 3 oder moderner Metro-Style Anwendungen unter Windows 8. Mit der Windows 8 Consumer Preview, die ebenfalls ab heute verfügbar ist, entwickeln Sie schon heute mit Visual Studio 11 Beta für Windows 8. Visual Studio 11 Beta, einfach produktiver entwickeln. Das neue schlanke Userinterface setzt den Quellcode und ihre Lösung in den Mittelpunkt. Die integrierte Suche über Quellcode oder selbst über die Funktionen in Visual Studio hilft ihnen bei der blitzschnelle Navigation durch ihren Code. Der neue Solution Explorer hat es in sich. Navigieren Sie im neuen Solution Explorer bis zur Funktionsebene hinunter verfolgen Sie die Aufrufhierachie. Die Vorschau-Funktion hält dabei ihren Arbeitsplatz frei von unnötig geöffneten Fenstern. Auf Veränderungen schnell zu regieren ist heutzutage ein MUSS. Aber bitte mit Qualität. Rasche nachvollziehbare Teamkommunikation, Transparenz, unkompliziertes flexibles Qualitätsmanagement und nahtlose Integration im Betrieb sind Erfolgsfaktoren für ihre Projekte. Visual Studio mit Team Foundation Server passt sich an ihren persönlichen Entwicklungsprozess an und bietet ihnen darüber hinaus die notwendigen Funktionspalette (Nahtlose Teamkommunikation, Storyboarding, CodeReviews, Qualitätsmanagent) um ihr Projekt erfolgreich zu implementieren. Mehr Informationen zu Visua Studio 11 Beta finden Sie hier: S. Somasegars Blog: “The Road to Visual Studio 11 Beta” Jason Zanders Blog: “Sneak Preview of Visual Studio 11 and .NET Framework 4.5 Beta” What's new in Visual Studio 11 Beta Da Sie Dank Visual Studio 11 Beta nun ihre täglichen Aufgaben schneller erledigen können wünsche ich Ihnen viel Spaß mit der neu gewonnenen Freizeit und freue mich auf Ihr Feedback! Andreas Pollak Product Marketing Manager Visual Studio & Expression

Visual Studio 11 Beta angekündigt,…

Von Andreas Pollak Autor Feed 23. February 2012 19:40
Wie soeben von Jason Zanders und S. Somasegar bekannt gegeben wurde steht die Beta-Version von Visual Studio 11 und das .NET Framework 4.5 Beta ab 29. Februar zum Download bereit. Als Entwickler können Sie die neuen Features dank der “Go-Live”-Lizenz gleich bei ihren aktuellen Projekten in der Produktionsumgebung nutzen, denn Visual Studio 2010 Projekte lassen sich ohne Konvertierung in Visual Studio 11 Beta bearbeiten. Mehr zu Visual Studio 11 Beta erfahren Sie übrigens auf unserem Visual Studio 11 Beta Launch event am 15. März 2012. Ein Update der Agenda folgt in der nächsten Woche! ACHTUNG: Der On-Site Event ist zwar ausgebucht, aber durch ihre Anmeldung können Sie bei der Live Übertragung mit dabei sein. Was ist neu? Das neue Release von Visual Studio hat drei wichtige Ziele: Erstellung top-moderner Consumer-und Business-Anwendungen für Sie noch einfacher und schneller zu machen. Verbessern Ihrer täglichen Arbeit durch eine vereinfachte, noch produktivere Umgebung Effizientere Zusammenarbeit, hohe Flexibilität und Produktivität in Ihrem Entwicklungsteam Ich möchte Ihnen im Folgenden die Highlights aus jedem dieser Bereiche vorstellen: Erstellung top-moderner Consumer-und Business-Anwendungen Kunden erwarten mehr von Ihren Applikationen: Die Welt der Verbraucher und Geschäftsanwender wachsen zusammen – Top-Design und Funktionalität sind in beiden Welten gefragt. Software muss ständig und auf einer Vielzahl von Geräten verfügbar sein. Eine Fülle neuer Funktionen in Visual Studio trägt diesen gestiegenen Anforderungen Rechnung. Hier einige Highlights: Der neue “Interactive Mode” ermöglicht es, in vielen Fällen schon beim Entwickeln zu sehen, wie sich die Applikation verhält und macht damit das Design hochgradig interaktiver Anwendungen wesentlich intuitiver. Das Entwickeln der neuen Anwendungen im Metro-Design wird voll unterstützt – und zwar in einer Vielzahl von Sprachen von .NET (C#, VB.NET, C++) bis JavaScript. Neue Editoren für HTML erweitern die Möglichkeiten von Visual Studio und machen das Erstellen moderner, adaptiver Webanwendungen mit HTML 5, CSS 3, aber auch mit “traditionellem” HTML noch produktiver. Neue Tools für JavaScript und iQuery sorgen für die verbesserte Entwicklung interaktiver, responsiver Webanwendungen. Der neue “Page Inspector” hilft Entwicklern, Probleme schneller zu lokalisieren und interaktiv Änderungen durchzuführen, während sie die Web-Applikation bedienen. Visual Studio bietet erstklassige Unterstützung für Windows Azure. Entwickler können ihr bestehendes Wissen anwenden. Dabei ist es egal ob Lösungen gefragt sind, die in der Cloud gehostet werden, lokal laufen, oder ob die Anwendungen intern oder öffentlich zugänglich sind. Die Unterstützung für SharePoint und Office-Development wurde nochmals verbessert und ermöglichen die noch bessere Nutzung dieser bekannten Tools für hochgradig produktive Businesslösungen. Vereinfachte, noch produktivere Umgebung Starten Sie Visual Studio 11 und Sie werden sehen: Etwas ist anders. Freuen Sie sich unter anderem auf folgende Features: Die neue, überarbeitete Benutzeroberfläche wird Sie begeistern! Bessere Übersichtlichkeit und einfachere Navigation waren das Ziel. Konzentrieren Sie sich auf den Code, nicht die Oberfläche. Mehr Platz für Ihren Code! Ganze 42 Pixel mehr, genauer gesagt. Am Entwicklungsprozess sind viele beteiligt, und Visual Studio 11 bringt sie zusammen: Kunden, Business-Analysten, Tester und Operations-Mitarbeiter können die Tools nutzen die sie bereits kennen, und es stehen neue Werkzeuge speziell für diese Zielgruppen zur Verfügung. Die neue Registerkarte “Solution Explorer” erlaubt die inhaltsbasierte Navigation innerhalb Ihres Projekts – so finden Sie schneller die Codestellen, nach denen Sie suchen. Die Vorschau-Funktion ermöglicht es, den Inhalt von Files zu sichten ohne dafür ein ganzes Fenster öffnen zu müssen – noch ein Plus für mehr Übersichtlichkeit. Die verbesserte “History”-Funktion ermöglicht es Ihnen, jeden Ihrer Schritte nachzuvollziehen, egal ob die betroffenen Dateien gerade geöffnet sind. Kontinuierliches Unit Testing in Verbindung mit der Erkennung von durch Tests betroffenen Codepfade (“Test Impact Analysis”)erlaubt es Ihnen Fehler während des Entwicklungsprozesses schneller zu finden. Mit der “Coded UI”-Funktionalität testen Sie automatisiert Benutzeroberflächen von Web- und Windows-Anwendungen ohne endloses Klicken. Der “Test Manager” ist ein leistungsfähiges, integriertes Tool um Testanforderungen zu managen, den Testprozess zu automatisieren, manuelles und exploratives Tests durchzuführen. Ebenso liefert das Tool alle Informationen, die Entwickler brauchen, um Fehler zu finden und zu beheben. Agile, produktive Teams Die Reduktion von Blindleistungen und ineffektiver Prozesse ist eine der größten Herausforderungen moderner Software-Teams. Das Ziel von Visual Studio 11 ist es, die Teamzusammenarbeit zu verbessern und frustrierenden, unproduktiven Leerlauf zu vermeiden. Unter anderem mit folgenden Features: Flexible Werkzeuge für agile Teams wie Kapazitätsplanung, Taskboards und Backlog-Management unterstützen optimal die aktuellen Praktiken in der Team-Entwicklung. Mit den neuen Möglichkeiten zum kollaborativen Code-Review wird die Zusammenarbeit von Entwicklern weiter optimiert. Die Integration mit Microsoft Project und Projekt Server machen ein übergeordnetes Projektmanagement in großen Organisationen übersichtlicher und effizienter. Team Foundation Service Goes Cloud: Der Team Foundation Service (momentan im Preview-Stadium) spart Kosten bei Betrieb und Setup Ihrer kollaborativen Entwicklungsplattform, ist stabil, sicher, verfügbar, sofort nutzbar und somit ideal für verteilte Teams jeder Größe. Integrieren Sie heterogene Teams in Ihren Entwicklungsprozess mit Hilfe von Team Explorer Everywhere – einem Plug-in für Eclipse und anderen Dritthersteller-Entwicklungstools. Keine “Bürger zweiter Klasse” mehr: Erweiterte ALM-Funktionalität für C++ und SharePoint bedeutet die volle Power des modernen Application Lifecycle Management für diese wichtigen Applikationstypen. Los geht’s! Wie gesagt – das sind nur einige der Highlights. Neugierig geworden? Laden Sie sich ab nächster Woche die Beta-Version herunter und erleben Sie das neue Visual Studio. Die Download-Links erfahren Sie natürlich am 29. Februar an dieser Stelle. Übrigens: Wir werden In Kürze mehr Informationen, auch auf Deutsch bereitstellen. Bis dahin sind Sie bei unseren US-Kollegen gut aufgehoben: S. Somasegars Blog: “The Road to Visual Studio 11 Beta” Jason Zanders Blog: “Sneak Preview of Visual Studio 11 and .NET Framework 4.5 Beta” What's new in Visual Studio 11 Beta Amerikanische Visual Studio 11 Beta Homepage Ich wünsche viel Spaß beim Informieren und Entdecken und freue mich auf Ihr Feedback! Andreas Pollak Product Marketing Manager Visual Studio & Expression

Asynchronen Programmierung mit async/await in .NET (III): Beispiel Anwendung

Von Mike Alexander Autor Feed 3. January 2012 04:55
Das folgende einfache Beispiel zeigt das GUI-Thread Blocking Verhalten einer Windows Presentation Foundation (WPF) Anwendung beim Download eines Files mittels der .NET WebClient-Klasse. Es zeigt, dass mittels async/await das GUI responsive bleibt. Alternativ dazu steht das Blocking Verhalten einer standard synchronen Variante. Das Beispiel folgt Teil Iund Teil IIeiner Serie aus 3 Teilen. Async-Sync zur Laufzeit Das Programm downloadet ein durch eine URL spezifiziertes File entweder synchron, oder asynchron mittels async/await. Es zeigt, dass der UI Thread in der synchronen Variante blockiert, in der asynchronen nicht. Die zweite Workload im Beispiel ist die Errechnung der Faktoriellen n! eines Integers n. Hier wird in der asynchronen Variante ein Worker Thread verwendet womit er gleichzeitig zum Download und UI Verwendung non-blocking Verhalten bringt. In der  synchron Variante läuft die Berechnung im UI Thread und blockiert daher. Der asynchrone Download kann durch die Verwendung eines Cancelation Tokens unterbrochen werden. Das Programm ist WPF-basiert mit XAML. Prerequisites Die Async CTP Funktionalität ist aktuell in mehreren Deliverables enthalten. Das Beispiel verwendet den Async CTPv3 mit Visual Studio 2010 – siehe Downloads. Dependency ist auf die Reference DLL AsyncCtpLibrary.dll, welche in der VS Solution in einen Folder Libraries gelegt wurde und sich nach der CTPv3 Installation in "%HOMEPATH%\Documents\Microsoft Visual Studio Async CTP\Samples" befindet.   Aufbau-Beschreibung Eingegebene URLs in eine WPF Textbox wird mittels (Uri.IsWellFormedUriString(textBoxURL.Text, UriKind.Absolute)) .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } validiert. n mittels Test auf Int32. Die Faktorielle wird wie folgt berechnet. public static BigInteger Factorial(int n){ BigInteger _factorial = 1; for (int i = 2; i <= n; i++) { _factorial *= i; } //Thread.Sleep(20000); return _factorial;} .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Der synchrone Download läuft über die WebClient.DownLoadFile Methode: WebClient client = new WebClient(); client.DownloadFile(textBoxURL.Text, destinationFile);   Der asynchrone Download Block hat den async Modifier dem Button Click Handler vorangestellt. await am Ende dispatched die Methode WebClient.DownloadFileTaskAsync asynchron.   public async void buttonDownloadAsync_Click (object sender, RoutedEventArgs e) ... await client.DownloadFileTaskAsync (new Uri(URL), destinationFile, cts.Token); .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Der Async Download wird in dem einfachen Beispiel mit Return void gestartet, was auch als “fire and forget” bezeichnet wird. Der Download kann über den TPL Cancelation Mechanismus abgebrochen werden. Dazu wird zuerst ein Cancelation Token angefordert: cts = new CancellationTokenSource(); .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } und wie im obigen await Statement als Argument übergeben. Für den async Download wird ein Progress Bar eingeblendet und ein Cancel Button mit u.A. enabled: progressBar.Visibility = Visibility.Visible; .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Das Event und der Delegate zum Update des Progress Bars sind   client.DownloadProgressChanged += new DownloadProgressChangedEventHandler (client_DownloadProgressChanged); .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } … progressBar.Value = e.ProgressPercentage;   Ein Worker Thread zur nicht-blockierenden Factorial Berechnung wird wie folgt mit einem Lambda Ausdruck gestartet: BigInteger ret = await TaskEx.Run(() => Factorial(factorNumber)); .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Downloads Async Support ist in aktuell 3 verschiedenen Downloads enthalten: (a) Async CTP: AsyncCtpLibrary.dll als Reference hinzufügen, (b) VS11 mit .NET 4.5 und (c) .NET 4.5 CTPv3: ein side-by-side Update von .NET <= 3.5 und in-place Update für 4.0. Achtung: da bei dem in-place Update zu z.B. dem Task Typ keine neuen statischen Members zu System.Threading.Tasks.Task hinzugefügt werden können haben manche Types zwischenzeitlich differierende Namen wie TaskEx. Zum Download: Download VS11 mit .NET 4.5 CTP Download .NET 4.5 CTP Download Async CTP Version 3(Beispiel in Teil III verwendet Async CTPv3) Task-based Asynchronous Pattern Dokument (Stephen Toub) Visual Studio 2010 Project Directory    Source // ---------------------------------------------------------------------------------- // Microsoft Developer & Platform Evangelism // // Copyright (c) Microsoft Corporation. All rights reserved. // // THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, // EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES // OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. // ---------------------------------------------------------------------------------- // The example companies, organizations, products, domain names, // e-mail addresses, logos, people, places, and events depicted // herein are fictitious. No association with any real company, // organization, product, domain name, email address, logo, person, // places, or events is intended or should be inferred. // ---------------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using Microsoft.Win32; using System.Net; using System.Threading.Tasks; using System.Numerics; using System.Threading; namespace dpe.CTPasyncWPF { public partial class MainWindow : Window { public string destinationFile; public string URL; int factorNumber = 20000; private CancellationTokenSource cts; public MainWindow() { InitializeComponent(); textBoxStatus.Text = "Enter Download URL"; factorialslider.Value = factorNumber; } public void ValidateURL() { if (Uri.IsWellFormedUriString(textBoxURL.Text, UriKind.Absolute)) { URL = textBoxURL.Text; } else { textBoxStatus.Text = "URL Validation Error"; } } public static BigInteger Factorial(int n) { BigInteger _factorial = 1; for (int i = 2; i <= n; i++) { _factorial *= i; } //Thread.Sleep(20000); return _factorial; } private void buttonDownloadSynchronous_Click(object sender, RoutedEventArgs e) { ValidateURL(); if (destinationFile == null) { SaveFileDestination(); } else { WebClient client = new WebClient(); client.DownloadFile(textBoxURL.Text, destinationFile); } } public async void buttonDownloadAsync_Click(object sender, RoutedEventArgs e) { ValidateURL(); if (destinationFile == null) { SaveFileDestination(); } else { progressBar.Visibility = Visibility.Visible; progressBar.Background = Brushes.Blue; downloadLabel.Visibility = Visibility.Visible; cancelAsyncDonwload.IsEnabled = IsEnabled; cts = new CancellationTokenSource(); try { WebClient client = new WebClient(); client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged); textBoxStatus.Text = "DownloadFileTaskAsync Download "; await client.DownloadFileTaskAsync(new Uri(URL), destinationFile, cts.Token); textBoxStatus.Text = "Continuing from await Download"; } catch (OperationCanceledException) { textBoxStatus.Text = "Download canceled on Task Parallel Lib Token"; } } } void client_DownloadCallback(object sender, DownloadDataCompletedEventArgs e) { textBoxStatus.Text = "Synchronous Download completed"; } private void FormatStatusTextBox() { textBoxStatus.Text = "\n"; } void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { progressBar.Value = e.ProgressPercentage; } private void quit_Click(object sender, RoutedEventArgs e) { Application.Current.Shutdown(); } private async void burnCyclesMultithreaded_Click(object sender, RoutedEventArgs e) { textBoxStatus.Text = "Running Factorial - Worker Thread"; // UI not redrawn instantaniously BigInteger ret = await TaskEx.Run(() => Factorial(factorNumber)); textBoxStatus.Text = Convert.ToString(ret); } private void ofdButton_Click(object sender, RoutedEventArgs e) { SaveFileDestination(); } private void SaveFileDestination() { try { Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog(); Nullable<bool> rtn = sfd.ShowDialog(); if (!string.IsNullOrEmpty(sfd.SafeFileName)) { destinationFile = sfd.SafeFileName; } textBoxStatus.Text = "Destination File " + "\"" + destinationFile + "\"" + " selected"; } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void textBoxURL_Keydown(object sender, KeyEventArgs e) { if (e.Key.Equals(Key.Enter)) { ValidateURL(); textBoxStatus.Text = "URL Changed to " + URL; } } private void burnCyclesBlocking_Click(object sender, RoutedEventArgs e) { textBoxStatus.Text = "Running Factorial Blocking"; FormatStatusTextBox(); BigInteger ret = Factorial(factorNumber); textBoxStatus.Text = (Convert.ToString(ret)); } private void factorialslider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { FactorialNumberSelected.Text = Convert.ToString(factorialslider.Value); textBoxStatus.Text = "Factorial Number Changed to " + FactorialNumberSelected.Text; } private void FactorialNumberSelected_TextChanged(object sender, TextChangedEventArgs e) { int intresult; bool inferInt32 = Int32.TryParse(FactorialNumberSelected.Text, out intresult); if (inferInt32) { factorNumber = Convert.ToInt32(FactorialNumberSelected.Text); textBoxStatus.Text = "Changed Factorial Number to " + FactorialNumberSelected.Text; } else { textBoxStatus.Text = "Enter an Integer "; } } private void ClearStatus_Click(object sender, RoutedEventArgs e) { textBoxStatus.Clear(); } private void cancelAsyncDonwload_Click(object sender, RoutedEventArgs e) { cts.Cancel(); } } } Zurück zu Teil I (synchron/asynchron, async in .NET), weiter zu Teil II (async/await)   Disclaimer: Allgemeine rechtliche Hinweise

Asynchrone Programmierung mit async/await in .NET (II)

Von Mike Alexander Autor Feed 3. January 2012 03:03
.NET4.5 inkludiert neuen Language-und Library Support für asynchrone Programmierung mit den asyc-und await Keywords. Sie ermöglichen gemeinsam mit dem Task-based Asynchronous Pattern (TAP) die wesentlich erleichterte Erstellung von sowohl neuem Client/Server asynchronem Code, als auch das Refactoring existierenden synchronen Codes. async/await eignet sich für computational, Netzwerk-und I/O Loads mit mittlerer-hoher Latency. Wie im ersten Teil der Serie gezeigt existieren in .NET bereits eine Reihe an Asynchron Ansätzen. async/await depreciated APM, folgt EAP - welches für manche multi-threaded Probleme noch weiter Lösung ist und baut auf die Task Parallel Library (TPL) auf. Im Zuge der erweiterten Asynchron Funktionalität in .NET sind in .NET 4.5 verschiedenste async Methoden und Handler in z.B. der BCL, WPF, ASP.NET, ADO.NET etc. für sowohl C# als auch VB hinzugekommen. C# async/await besteht aus (1) dem C# Modifier Keyword async und der Operator Keyword await, (2) Klassen der TPL wie System.Threading.Tasks.Task(Of TResult) und (3) umfangreichem Compiler Support. Der async Modifier – siehe unten - wird der Methode vorangestellt, was sie als asynchron deklariert. Neben normalen Methoden kann async auch mit Lambda Ausdrücken und anonymen Methoden verwendet werden. public async void buttonDownloadAsync_Click (object sender, RoutedEventArgs e) ... await client.DownloadFileTaskAsync (new Uri(URL), destinationFile, cts.Token); .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } Der await Operator steht vor dem asynchronen Aufruf und schließt einen async/await Block ab; oben wird ein WebClient.DownloadFileTaskAsync asynchron aufgerufen. Die Methode DownloadFileTaskAsync ist neu mit 4.5 und NICHT die bereits aus dem EAP bekannte WebClient.DownloadFileAsync. Semantik Die Semantik von await ist anders als der Name intuitiv erahnen lässt nicht das Blockieren des aktuellen Threads und Warten auf ein Signal um zu synchronisieren (wie in System.Threading.WaitHandle). wait hingegen bedeutet: “Under the covers, the await functionality installs a callback on the task via a continuation. This callback will resume the asynchronous method at the point of suspension”  [Stephen Toub, Task-based Asynchronous Pattern]. In anderen Worten und verdeutlicht durch das Beispiel in Teil III der Serie: der aufrufende Thread kehrt sofort nach dem Async Dispatch zurück und kann durch die WPF Message Loop Pump neue Work Messages annehmen. Der async/await Block selbst bleibt bei await bis zum Callback stehen. Wenn im Standard-Synchronization Context der aufrufende Thread der UI Thread ist kann dieser während auf den Callback gewartet wird andere Arbeit verrichten. Der User sieht es als “flüssiges” UI Verhalten in dem er in der selben oder anderen App andere Operationen starten kann. “Unter der Motorhaube” passiert allerdings viel mehr: der Compiler erzeugt einen Callback für den async Task. Aus dem gesamten Programm mit seinen async/await Blöcken generiert er transpartent eine State-Machine für die Callbacks und Task Events. Mit der erzeugten State Machine wird der Programmfluss auf nur einen Thread umgeordnet. Der Compiler erzeugt damit das Äquivalent zu kooperativem Multitasking zur compile-Zeit. async/await ist damit weder parallel, noch multi-threaded. Stattdessen wird der Thread des aufrufenden Synchronization Contexts – typisch der UI Thread – besser genutzt. Der Kern der async/await Technologie ist damit im Compiler. Da das Verhalten von async/await auch mit existierenden Konstrukten erreicht werden kann, können sie auch als “Syntactic Sugar” bezeichnet werden.     Vorteile Die Vorteile dieses Ansatzes sind enorm: Der eigene Code ähnelt nach wie vor der synchronen Form, läuft jedoch asynchron. Es muss nicht multi-threaded programmiert werden mit seinen bekannten Challenges. Man muss weiters keine Callbacks und Handler manuell schreiben, der Compiler generiert sie. Verglichen mit APM und Thread Pool Ansätzen ermöglicht async/await hohe Kompaktheit. Weiters integriert async/wait mit der TPL; Task und Task<T>sind kombinierbar (engl.: composable). await retourniert entweder void, den TPL Task, oder Task<T>; Methoden der TPL wie die Kombinatoren WhenAll, WhenAny sind für async/await verwendbar. async/await nutzt den CancelationToken Task Cancel Mechanismus der TPL (siehe Beispiel). Für Progress Reporting sind in der CTP das Interface IProgress<T> und die Klasse, Progress<T> hinzugekommen. Eine weitere Erweiterung der CTP gegenüber der .NET 4.0 TPL ist das Tasks await-ed werden können. Die eigenen Types müssen dafür nur die Methoden IsCompleted, Incomplted und GetResults() haben. Nachteile Nachteile von async/await (teils von jedem anderen Async Ansatz) sind: Overhead: es eignet sich nicht für kleinst-Operationen und sollte auch nicht verwendet werden, wenn die Return-Zeit so gering ist dass eine standard synchroner Fluss ausreicht. Sinnvolle Granularitäten sollten gefunden werden. await kann nicht in Main(), catch und finally verwendet werden. async/await ist nicht multi-threaded aber sehr wohl concurrent (dt.: nebenläufig) wenn mehrere asynchrone Operationen gleichzeitig ausständig sind. Der Task-based Asynchronous Pattern (TAP) erlaubt awaits in async Methoden welche Task(T) zurück liefern – Nesting. Behavioral Equivalance: ist das Verhalten des asynchronen Programmes dasselbe wie das des Synchronen? Das Verhalten von Business Logik bei einfacher Änderung der Aufrufe in asynchron async/await sollte sich generell an sich nicht ändern (Disclaimer: muss aber trotzdem auf Äuquivalenz getestet werden!!). Ausnahmen sind z.B. falls das Programm exklusiv State im Synchronization Context hält; wenn ein Thread der ursprünglich exklusiv verwendet wurde nun interleaved mehrfach verwendet wird müssen Auswirkungen bedacht werden. Ein Beispiel ist der UI Thread: falls ein Programm Annahmen über den globalen State des UI hat müssen sie im Zuge eines async/await Refactorings asserted werden.   Zurück zu Teil I (synchron/asynchron, async in .NET), weiter zu Teil III (Beispiel Anwendung). Downloads Async Support ist in aktuell 3 verschiedenen Downloads enthalten: (a) Async CTP: AsyncCtpLibrary.dll als Reference hinzufügen, (b) VS11 mit .NET 4.5 und (c) .NET 4.5 CTPv3: ein side-by-side Update von .NET <= 3.5 und in-place Update für 4.0. Achtung: da bei dem in-place Update zu z.B. dem Task Typ keine neuen statischen Members zu System.Threading.Tasks.Task hinzugefügt werden können haben manche Types zwischenzeitlich differierende Namen wie TaskEx. Zum Download: Download VS11 mit .NET 4.5 CTP Download .NET 4.5 CTP Download Async CTP Version 3(Beispiel in Teil III verwendet Async CTPv3) Task-based Asynchronous Pattern Dokument (Stephen Toub) Disclaimer: Allgemeine rechtliche Hinweise

Asynchrone Programmierung mit async/await in .NET (I)

Von Mike Alexander Autor Feed 2. January 2012 22:42
Das neue Jahr bringt neue Paradigmen – fast&fluid wird Mainstream im GUI und asynchrone Programmierung generell damit eine Notwendigkeit. Wer kennt es nicht: nach einem Click in einer GUI Anwendung, welche auf einem starken Rechner mit guter single-und Multithreaded Performance läuft, scheint sie trotzdem festzustecken; man sagt die Anwendung “blockiert” (engl. blocked), was häufig durch Anwendungs Workload auf dem User Interface (UI) Thread hervorgerufen wird. Dem Anwender bleibt nichts anderes übrig als zu warten bis die blockierende Operation endet um das GUI weiter verwenden zu können. Das Problem von blocking Behavior ist allerdings nicht nur auf den Client beschränkt. Eine Server-seitige multi-threaded Anwendung kann schnell den Zustand eines ausgeschöpften Thread-Pools erreichen, wenn einzelne Threads z.B. für I/O Operationen blockieren. In der 3-teiligen Serie werden wir sehen, wie das neue async/await in .NET asynchrone Programmierung in vernünftiger Granularität zum Default Ansatz gegen Blocking machen soll. Synchron-Asynchron Die Programmausführung in dem Kontext wird auch als synchron bezeichnet; Programmschritte durchlaufen ein sequentiell Muster. Ein Programm Statement kommt erst zur Ausführung nachdem das Vorherige beendet wurde. Eine synchron aufgerufene Methode retouniert den Programmfluss erst wieder an den Aufrufer sobald sie selbst abgeschlossen ist. Synchrone Abläufe im weiteren Sinn inkludiert auch die Verarbeitung nach einem strickten Zeittakt wie in synchronen Netzen, parallele Modelle wie SIMD (single instruction multiple data) in GPUs und Pipelining in aktuellen CPUs. Asynchrone Programmierung hingegen erlaubt die Ausführung von Programmteilen ohne der vorherigen Beendigung anderer Prozesse und Methoden. Nach einem asynchronen Aufruf springt das Programm sofort wieder zum Aufrufer zurück, die Resultate liefert die aufgerufene Methode sobald fertig. Lang laufende Operationen (engl.: long-running) müssen damit nicht zu Blocking Verhalten der Anwendung führen. Praktische Vorteile von Asynchronität sind flüssige GUIs am Client, höhere Skalierbarkeit von server-seitigem Code, und besseres Antwortzeit Verhalten von Enterprise Anwendungen. Nun stellt sich die Frage warum nicht schon immer asynchron programmiert worden ist? Die Antwort war bis jetzt zumeist dass es wesentlich komplexer ist, es nicht dem omnipräsenten sequentiellen Gedankenmodell entspricht, Concurrency Issues entstehen können und Test/Debug entsprechend schwieriger sein kann. In einer Abgrenzung zur Parallel Programmierung werden wir sehen, dass async/await in .NET nicht parallel ist und letztere Hindernisse in der Async Verwendung größtenteils ausräumt.  Asynchrone Programmier Modelle in .NET In .NET sind bereits eine Reihe an asynchronen Programmier Modellen vorhanden. async/await und der Task-based Asynchronous Pattern ist nur die letzte Iteration Asynchron in den .NET Mainstream zu bringen. .NET 1.0 inkludierte neben dem umfangreichen System.Threading.Thread, welches natürlich auch für Asynchron verwendet werden kann, das vergleichsweise komfortablere Asynchronous Programming Model (APM). Mit den Konstrukten Begin/End in dem sog. IAsyncResult Pattern hat zum Beispiel die FileStream Klasse Methoden zum asynchronen Lesen/Schreiben als Begin{Read, Write}. Die asynchrone Operation läuft dabei in einem separaten Thread. Resultate werden entweder über IAsyncResult Objekte direkt oder Callbacks mit IAsyncResult retouniert. Ebenfalls seit .NET 1.0 kann über APM hinausgehend jede Methode über einen Delegate asynchron aufgerufen werden. Der Delegate ist dabei ein Wrapper zur synchronen Methode; die CLR startet dann via Delegate ein Replika der Methode in einem Worker Thread. Der Event-based Asynchronous Pattern (EAP) kam mit .NET 2.0 hinzu, womit APM depreciated wurde. EAP Methoden und Events im Framework haben das Namensschema {Operation}Async respektive {Operation}Completed. Eine häufig verwendete Methode ist z.B. WebClient.DownloadFileAsync, ein weiterer Namespace mit einigem EAP Support ist System.Net. System.ComponentModel.BackgroundWorker ist der universelle Weg in EAP Threads aus dem ThreadPool zu nutzen. Die Task Parallel Library (TPL) brachte umfangreiche Library-und Language Enhancements für vor allem multi-threaded und paralleles Programmieren (Parallel.For, PLINQ etc.) Die darin enthaltenen System.Threading.Tasks.Task und Task<T> “Task Klassen” sind nicht nur Basis für das folgende async/await sondern können auch in dem APM und EAP Patterns verwendet werden.  Zur Umsetzung des Dataflow Paradigmas-Skeletons gibt es seit .NET 3.5 SP1 die Reactive Extensions (Rx). Ähnlich den vorherigen asynchronen Ansätzen bei denen der Kontrollfluss eines Programmes asynchron abläuft erlaubt Dataflow automatisches asynchrones Propagieren von Datenänderungen. Rx nutzt IObservable<T> für Notifications zu Datenänderungen, und LINQ-Operatoren. Mit .NET 4.5 kommt komplementär die umfangreiche TPL Dataflow Library (System.Threading.Tasks.Dataflow) hinzu. Wesentliche Eigenschaften der TPL Library sind ein low-level Message Passing Ansatz für hohen Throughput und geringe Latency sowie die Zusammensetzbarkeit (engl.: composability) mit anderen async Konstrukten und Libraries wie zum Beispiel async/await. Rx und TPL vereinfachen Data Concurrency ungemein. Weiter zu Teil II (async/await) und Teil III (Beispiel Anwendung) sobald gepostet. Downloads Async Support ist in aktuell 3 verschiedenen Downloads enthalten: (a) Async CTP: AsyncCtpLibrary.dll als Reference hinzufügen, (b) VS11 mit .NET 4.5 und (c) .NET 4.5 CTPv3: ein side-by-side Update von .NET <= 3.5 und in-place Update für 4.0. Achtung: da bei dem in-place Update zu z.B. dem Task Typ keine neuen statischen Members zu System.Threading.Tasks.Task hinzugefügt werden können haben manche Types zwischenzeitlich differierende Namen wie TaskEx. Zum Download: Download VS11 mit .NET 4.5 CTP Download .NET 4.5 CTP Download Async CTP Version 3(Beispiel in Teil III verwendet Async CTPv3) Task-based Asynchronous Pattern (Stephen Toub)   Disclaimer: Allgemeine rechtliche Hinweise

Visual Studio 11 Developer Preview Training Kit

Von Andreas Pollak Autor Feed 16. December 2011 13:05
Gestern wurde ein Update zum Visual Studio 11 Developer Preview Training Kit veröffentlicht. Dieses enthält sowohl die aktualisierten Labs der BUILD als auch neue Labs. Das Training Kit ist in zwei verschiedenen Offline-Varianten verfügbar, kann aber auch online auf der MSDN konsumiert werden. Du kannst das Training Kit als komplettes Paket herunterladen (37,2 MB) oder den Web Installer (2,5 MB) verwenden, bei dem du die einzenen Labs On-Demand herunterladen kannst. Folgende Hands-On Labs sind im Training Kit enthalten Visual Studio Development Environment A Lap Around the Visual Studio 11 Development Environment What's New in Visual Studio 11 for C++ Developers (new) Languages Asynchronous Programming in the .NET Framework 4.5 Web What's New in ASP.NET and Web Development in VS 11 What's New in Web Forms in ASP.NET 4.5 What's New in ASP.NET MVC 4 (new) Using Page Inspector in Visual Studio 11 (new) Build RESTful APIs with WCF Web API .NET Framework Using Portable Class Libraries (new) Application Lifecycle Management Building the Right Software: Generating Storyboards and Collecting Stakeholder Feedback with Visual Studio 11 Agile Project Management in Team Foundation Server 11 Making Developers More Productive with Team Foundation Server 11 Diagnosing Issues in Production with IntelliTrace and Visual Studio 11 Exploratory Testing and Other Enhancements in Microsoft Test Manager 11 Unit Testing with Visual Studio 11: MSTest, NUnit, xUnit.net, and Code Clone Windows Metro-style apps Windows 8 Developer Preview Hands on Labs from BUILD (link to http://www.buildwindows.com/labs) Andreas Pollak Product Marketing Manager Visual Studio & Expression Pragmatischer Einkauf kann teuer sein! Spare bares Geld mit der richtigen Beratung für Visual Studio!! Unser persönliches Rückrufservice berät Dich gerne.

OData mit Windows Communication Foundation Data Services: Katapult.TV Webcast am Freitag 25. 11. 08:30

Von Mike Alexander Autor Feed 22. November 2011 19:06
Das Open Data Protocol (OData) ist ein REST-basiertes Web Protokoll für Daten Services. OData nutzt Web-Stack Technologien wie JSON und Atom über HTTP. Es bietet ähnliche Funktionen wie ODBC, ADO.NET und JDBC für CRUD (Create, Read, Update, Delete) Operationen. OData hat breite Library-Unterstützung mit den Windows .NET Communication Foundation (WCF) Data Services bis zu JavaScript. Die OData Spezifikation ist von Microsoft unter der Open Specification Promise veröffentlicht. Tentative Inhaltspunkte der Vorstellung sind: Web Services Übersicht Einstiegs Demo Die OData Spezifikation Protocol Stack HTTP REST JSON Atom, AtomPub Protokoll Operationen - Semantik Query Options Batch Requests Service Metadata Entity Data Model Providers NetFlix EBay Northwind odata.org Windows Azure Table Storage Windows Azure Marketplace DataMarket Libraries .NET WCF ASP.NET Ajax Toolkit datajs Tools: LINQPad Protokoll Overhead Security Eco System Windows Client/WCF C# Sample - Visual Studio Odata Service Binding zu XAML JavaScript Sample – VS 11 DP Anmelden

Team Foundation Server im Einsatz bei Siemens Healthcare

Von Andreas Pollak Autor Feed 15. November 2011 23:25
Entwicklungsumgebungen wie der Team Foundation Server unterstützen große verteilte Entwicklungsorganisationen. Ein neuer Artikel bei heise Developer zeigt, wie SYNGO, ein Geschäftsgebiet von Siemens Healthcare, den TFS eingeführt hat. Dies war ein anspruchsvolles Projekt - SYNGO entwickelt bildgebende Softwareapplikationen mit einigen hundert Entwicklern und Entwicklerinnen in Standorten auf mehreren Kontinenten. Die Entwicklungsprojekte sind somit geographisch verteilt. Das Produkt selbst besteht aus mehreren tausend Anforderungen, die in vielen Millionen Zeilen C++ und C# umgesetzt sind. Erfahren Sie, wie das Team von SYNGO die hohen Anforderungen an Software-Engineering im Medizinbereich mit Hilfe von Team Foundation Server meistern konnte und welches Fazit die Verantwortlichen ziehen. Hier geht es zum Artikel auf heise developer. Andreas Pollak Product Marketing Manager Visual Studio & Expression Pragmatischer Einkauf kann teuer sein! Spare bares Geld mit der richtigen Beratung für Visual Studio!! Unser persönliches Rückrufservice berät Dich gerne.

Windows Embedded Roadmap

Von Andreas Pollak Autor Feed 15. November 2011 23:14
Windows Embedded Enterprise v.Next (voraussichtlich ein Quartal nach allgemeinen Verfügbarkeit von Windows 8 verfügbar) Diese Produkte sind voll funktionale Versionen der Microsoft Desktop Betriebssysteme. Sie sind für spezielle gebaute Hardware und Software für integrierte Lösungen gedacht, welche mit der vollen Version von Windows kompatibel sein müssen und die Flexibilität einer eigens entwickleten Benutzerschnittstelle benötigen. Die Windows Embedded Enterprise Family besteht aus: New: Windows 7 Professional SP1 for Embedded Systems New: Windows 7 Ultimate SP1 for Embedded Systems Windows Vista Business for Embedded Systems Windows Vista Ultimate for Embedded Systems Windows XP Professional for Embedded Systems Windows Embedded Standard v.Next (Hier wird es im ersten Quartal von 2010 eine Community Technology Preview geben. Die allgemeine Verfügbarkeit ist voraussichtlich drei Quartale nach Windows 8) Diese Version wird die ARM Architektur unterstützen und alle Management und Sicherheitsfunktionalitäten von WIndows 8. Diese Produkte können sehr detailliert angepasst werden. Windows Embedded Compact v.Next (wird in der zweiten Hälfte von 2012 folgen und in Visual Studio 2010 unterstützt) Windows Embedded Compact ist die Weiterentwicklung von Windows Embedded CE. Compact ist ein komponenten orientiertes Real-time Betriebssystemmit der eine Vielzahl von sehr kleinen und ressourcenschonenden Geräte gebaut werden. Compact bietet auch Unterstützung für Silverlight und die neuesten Browser Technologien: Silverlight fürWindows Embedded basiert auf Silverlight v3.0 und kann mit Microsoft Expression Blend entwickelt werden. Compact enthält auch eine aktualisierte Version von Internet Explorer, die auf der selben Technologie aufbaut wie sie auch in  Microsoft Windows Phone 7 zum Einsatz kommt und bietet auch Unterstützung für Flash 10.1, multi-touch, usw… Andreas Pollak Product Marketing Manager Visual Studio & Expression Pragmatischer Einkauf kann teuer sein! Spare bares Geld mit der richtigen Beratung für Visual Studio!! Unser persönliches Rückrufservice berät Dich gerne.

www.microsoft.com/austria | © 2009 Microsoft Corporation. Alle Rechte vorbehalten.
BlogEngine.NET 2.5.0.6 powered by atwork