Training - Beratung - Projektarbeiten

www.David-Tielke.de

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

Kommentar schreiben

Loading