Как получить правильный синтаксис «ждать использования»?C#

Место общения программистов C#
Ответить
Anonymous
 Как получить правильный синтаксис «ждать использования»?

Сообщение Anonymous »

У меня есть следующий синхронный код, который работает нормально: < /p>

Код: Выделить всё

    private void GenerateExportOutput()
{
using StreamWriter writer = new(Coordinator.OutputDirectory + @"\export.txt");

if (this.WikiPagesToExport.IsEmpty)
{
return;
}

var wanted = new SortedDictionary(this.WikiPagesToExport, StringComparer.Ordinal);
foreach (var title in wanted.Keys)
{
writer.WriteLine(title);
}
}
< /code>
Я хочу изменить его, чтобы быть асинхронным. SO: < /p>
    private async Task GenerateExportOutputAsync()
{
using StreamWriter writer = new(Coordinator.OutputDirectory + @"\export.txt");

if (this.WikiPagesToExport.IsEmpty)
{
return;
}

var wanted = new SortedDictionary(this.WikiPagesToExport, StringComparer.Ordinal);
foreach (var title in wanted.Keys)
{
await writer.WriteLineAsync(title).ConfigureAwait(false);
}

await writer.FlushAsync().ConfigureAwait(false);
}
< /code>
, который компилируется. Но один из анализаторов, которых я использую (meziantou.analyzer), теперь предполагает, что я «предпочитаю использовать« ждать использования ». Я никогда не использовал ждать использования (хотя я пробовал несколько раз в прошлом и всегда сталкивался с теми же проблемами, с которыми я сейчас сталкиваюсь). Но я хотел бы использовать его, так что: < /p>
        await using StreamWriter writer = new StreamWriter(OutputDirectory + @"\export.txt").ConfigureAwait(false);
Теперь он больше не компилируется: CS0029 не может неявно преобразовать тип 'System.Runtime.compilerservices.configuredAsyncdisposable в' System.io.StreamWriter '. Хорошо, хорошо, поэтому я изменяю его, чтобы использовать var вместо:

Код: Выделить всё

        await using var writer = new StreamWriter(OutputDirectory + @"\export.txt").ConfigureAwait(false);
, который проходит через CS0029, но теперь более поздний код не компилируется: ошибка CS1061 'ConfiguredAsyncDisposable' не содержит определения для 'writelineasync' (и аналогично Один для FlushAsync .

Код: Выделить всё

            await ((StreamWriter)writer).WriteLineAsync(title).ConfigureAwait(false);
nope: ошибка CS0030 не может преобразовать тип 'System.Runtime.compilerServices.configuredAsyncdisposable' в 'system.io.streamwriter'
Я погуглил кучу и прочитал кучу, как сейчас, так и несколько раз в прошлом, но я просто не мог понять, как использовать эту «ждать», используя ». Как я могу это сделать? Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/708 ... ax-correct
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»