Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Андрей Карпов «Поддержка C# 8 Async Streams в R...

Андрей Карпов «Поддержка C# 8 Async Streams в ReSharper 2019.1»

В докладе кратко рассмотрим нововведения в C# 8 для поддержки асинхронного программирования, а также покажем как ReSharper помогает использовать новые языковые возможности.

DotNetRu

April 18, 2019
Tweet

More Decks by DotNetRu

Other Decks in Programming

Transcript

  1. C# 6: await в catch/finally var resource = await GetResourceAsync();

    try { await UseResourceAsync(resource); } catch (Exception e) { await LogExceptionAsync(e); } finally { await resource.ReleaseAsync(); } 3
  2. C# 7: task-like типы public async ValueTask<int> GetAnswerAsync() { if

    (_isAlreadyCalculated) return _cachedResult; return await CalculateAnswer(); } 4
  3. Оператор using var resource = GetResource(); try { // use

    resource } finally { resource?.Dispose(); } 10
  4. Оператор await using var resource = GetResource(); try { //

    use resource } finally { await resource?.DisposeAsync(); } 13
  5. Оператор foreach var enumerator = xs.GetEnumerator(); try { while (enumerator.MoveNext())

    { var x = enumerator.Current; } } finally { enumerator?.Dispose(); } 16
  6. public interface IEnumerable<out T> : IEnumerable { IEnumerator<T> GetEnumerator(); }

    public interface IEnumerable { IEnumerator GetEnumerator(); } 17
  7. public interface IEnumerator<out T> : IDisposable, IEnumerator { T Current

    { get; } } public interface IEnumerator { bool MoveNext(); object Current { get; } void Reset(); } 18
  8. Оператор await foreach var enumerator = xs.GetAsyncEnumerator(); try { while

    (await enumerator.MoveNextAsync()) { var x = enumerator.Current; } } finally { await enumerator.DisposeAsync(); } 20