170 похожих чатов

Вопрос по правильному использованию using с объектами, реализующими интерфейс IAsyncDisposable

в C# 9.0
using var responseStream = await response.Content.ReadAsStreamAsync(cancellationToken);
await using var responseStream = await response.Content.ReadAsStreamAsync(cancellationToken);
Какой из вариантов правильнее? И есть ли вообще разница в откомпилированном коде?
VS вполне устраивает первый вариант, решарпер настаивает на втором.
Если смотреть документацию Майкрософт, то я не вижу необходимости в await в начале строки:
https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/using-statement

22 ответов

10 просмотров

Оформи код кодом

Пока не очень понял вопроса using генерит код для IDisposable интерфейса, await using генерит код для IAsyncDisposable интерфейса

2 вариант сразу задиспозит. Надо скобками обрамлять. 1 вариант он не будет ждать диспоза

А он первый вариант даже и не дает сделать

Второй лучше.

Rustam
screenshot А он первый вариант даже и не дает сделать

Наверное, у тебя тут объект, не поддерживающий синхронный диспоз вообще?

Алексей Шокарев
нет, смотрите документацию

Где я не прав? Попробуй реализовать IAsyncDisposable и вызвать на нем обычный using

Алексей-Шокарев Автор вопроса
Andrew Shurunov
Где я не прав? Попробуй реализовать IAsyncDisposab...

Если объект реализует IAsyncDisposable вместо IDisposable, то инструкция using вызывает DisposeAsync и awaits, возвращенный ValueTask.

Алексей Шокарев
Если объект реализует IAsyncDisposable вместо IDis...

И? Ещё раз, сделай пустой класс с IAsyncDisposable и напиши: using var d = new MyAsyncDisposable();

Алексей-Шокарев Автор вопроса
Rustam
screenshot А он первый вариант даже и не дает сделать

Все он дает сделать в C# 9.0. Этот функционал появился в C# 8.0. По дефолту обычно 7.1 стоит

Алексей-Шокарев Автор вопроса
Rustam
Это 9

Не верю

Алексей-Шокарев Автор вопроса
Rustam
Хорошо

Я взял пример из работающего кода.

Алексей Шокарев
Я взял пример из работающего кода.

Я только что попробовал, у меня не работает Так что жду пруфа, что твой тип не реализует IDisposable

Алексей-Шокарев Автор вопроса
Rustam
И там реализован IDisposible?

<PropertyGroup> <TargetFramework>net5.0</TargetFramework> <Nullable>enable</Nullable> <LangVersion>9</LangVersion> </PropertyGroup>

Алексей-Шокарев Автор вопроса
Алексей Шокарев
Можно свойства проекта. Там точно C# 9.0?

Я даже глянул хабровскую и микрософотвскую статьи про новые фичи, там нет упоминаний https://sharplab.io/#v2:EYLgxg9gTgpgtADwGwBYA0AXEBLANmgExAGoAfAAQCYBGAWAChyAGAAnOoFYBuB8gZjaUWAQQAiLECwCSwgM4BPAHZhR2WQAcIsgIbBcMAN4M2A8gA4WANW24ArjHJIWqjVphylYABQBKI/RYAXwZg+l5TIQBhFn8WOJM2FBYAWV8Y43jM5hYAN20oFm0CFgBeFkUYAHcRUV8eAPjQwKA===

Похожие вопросы

Обсуждают сегодня

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Открыл свой двухкилобайтный экзешник в x32dbg, а тут какая-то хрень. Смущает кнопка "выполнить до пользовательского кода", а что ещё может быть в файле помимо него ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
11
Мне были интересны дишные хаки и я нашёл любопытный способ на форуме через __traits, что-то вроде int delegate(int) fac = (int n) => n == 0 ? 1 : n * __traits(parent, {})(n - ...
Constantin F.
1
Вопрос тем кто смотрит видео и слушает подкасты - как вы потом ищете нужную вам информацию? Вот статью я прочитал, потом могу искать нужную мне часть банальным поиском. Пропус...
Aleksandr Druzhinin
4
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Ребят, если кто в курсе - скажите, а в загранке такое же засилье маркетплейсов? или там простые сермяжные интернет-магазины живут попроще?
Андрей [aharito] Харитонов
14
Коллеги, доброе утро. Запустил на удаленном хосте приложение (ручками зашел туда по ssh и запустил, не командой удаленно). Создал потом ssh-туннель, и с моей машины приложение...
Δημήτηρ
9
Карта сайта