Training - Beratung - Projektarbeiten

www.David-Tielke.de

Materialien meiner Sessions und Workshops auf der DDC 2016

Da ist sie schon wieder vorbei, die .NET Developer Conference in Köln. An den insgesamt drei Tagen plus zusätzlichem Workshoptag, durfte ich mit einer Session zu .NET Core sowie zwei Workshops zu "Moderne Softwareentwicklung" sowie "Softwarequalität" teilnehmen. An dieser Stelle möchte ich mich noch einmal bei dem Veranstalter und natürlich auch allen Teilnehmern meiner Workshops und Sessions bedanken. Wie versprochen gibt es hier nun alle Inhalte zum Download. Ich freue mich auf die DDC 2017, welche vom 28.11.2017 bis 30.11.2017 stattfinden wird.


Das für die Workshopinhalte benötigte Passwort wurde während den Workshops bekannt gegeben und kann notfalls per Mail direkt bei mir erfragt werden.

Links
Workshop Softwarequalität
Workshop Moderne Softwareentwicklung
Session .NET Core

Webcast C# 6.0 – Folge 10: Await in catch/finally

Async und await waren in C# 4.0 die großen Neuerungen und erlauben die Entwicklung von asynchronem Code im Stile des synchronen Codes. Die Benutzung dieser zwei Schlüsselwörter funktioniert in nahezu jeder Situation, außer innerhalb von catch- und finally-Blöcken. Mit C# 6.0 wird diese Einschränkung nun aufgehoben.

Dazu aus der Projekt Roslyn Webseite:

In C# 5 we don’t allow the await keyword in catch and finally blocks, because we’d somehow convinced ourselves that it wasn’t possible to implement. Now we’ve figured it out, so apparently it wasn’t impossible after all. This has actually been a significant limitation, and people have had to employ unsightly workarounds to compensate. That is no longer necessary:
Resource res = null;
try
{
    res = await Resource.OpenAsync(…);       // You could do this.
    …
} 
catch(ResourceException e)
{
    await Resource.LogAsync(res, e);         // Now you can do this …
}
finally
{
    if (res != null) await res.CloseAsync(); // … and this.
}
The implementation is quite complicated, but you don’t have to worry about that. That’s the whole point of having async in the language.
Links

Webcast C# 6.0 – Folge 9: Exception Filters

Das Exceptionshandling in C# ist sehr vielfältig und fast alle Wünsche können mit Try/Catch/Finally abgedeckt werden. Bisher gab es allerdings keine Möglichkeit, wie in anderen Sprachen auf der .NET-Plattform, einen catch-Block nur dann auszuführen, wenn eine bestimmte Bedingung erfüllt ist. So könnte eine von COM fliegende Exception auf den Fehlercode ausgewertet werden, o.ä. Mit C# 6.0 wurde das Exceptionhandling um die Exception Filters erweitert, um solche Szenarien abzudecken.

Dazu aus der Project Roslyn Webseite:

VB has them. F# has them. Now C# has them too. This is what they look like:
try { … }
catch (MyException e) when (myfilter(e))
{
    …
}
If the parenthesized expression evaluates to true, the catch block is run, otherwise the exception keeps going. Exception filters are preferable to catching and rethrowing because they leave the stack unharmed. If the exception later causes the stack to be dumped, you can see where it originally came from, rather than just the last place it was rethrown. It is also a common and accepted form of “abuse” to use exception filters for side effects; e.g. logging. They can inspect an exception “flying by” without intercepting its course. In those cases, the filter will often be a call to a false-returning helper function which executes the side effects:
private static bool Log(Exception e) { /* log it */ ; return false; }
…
try { … } catch (Exception e) when (Log(e)) {}
Links