我有以下同步代码,运行良好:
private void GenerateExportOutput()
{
using StreamWriter writer = new(Coordinator.OutputDirectory + @"\export.txt");
if (this.WikiPagesToExport.IsEmpty)
{
return;
}
var wanted = new SortedDictionary<string, WikiPage>(this.WikiPagesToExport, StringComparer.Ordinal);
foreach (var title in wanted.Keys)
{
writer.WriteLine(title);
}
}
我想把它改成异步的.因此:
private async Task GenerateExportOutputAsync()
{
using StreamWriter writer = new(Coordinator.OutputDirectory + @"\export.txt");
if (this.WikiPagesToExport.IsEmpty)
{
return;
}
var wanted = new SortedDictionary<string, WikiPage>(this.WikiPagesToExport, StringComparer.Ordinal);
foreach (var title in wanted.Keys)
{
await writer.WriteLineAsync(title).ConfigureAwait(false);
}
await writer.FlushAsync().ConfigureAwait(false);
}
它会编译成.但是我现在使用的一个分析器(Meziantou.Analyzer)建议我"更喜欢使用‘等待使用’".我从未使用过等待使用(尽管我过go try 过几次,总是遇到与现在相同的问题).但我想用它,所以:
await using StreamWriter writer = new StreamWriter(OutputDirectory + @"\export.txt").ConfigureAwait(false);
现在它不再编译:CS0029 Cannot implicitly convert type 'System.Runtime.CompilerServices.ConfiguredAsyncDisposable' to 'System.IO.StreamWriter'
.好吧,我把它改成var
:
await using var writer = new StreamWriter(OutputDirectory + @"\export.txt").ConfigureAwait(false);
这使得它通过了CS0029,但现在后面的代码没有编译:Error CS1061 'ConfiguredAsyncDisposable' does not contain a definition for 'WriteLineAsync'
(和FlushAsync
.Soooo类似的代码…可能会强制转换它?
await ((StreamWriter)writer).WriteLineAsync(title).ConfigureAwait(false);
不:Error CS0030 Cannot convert type 'System.Runtime.CompilerServices.ConfiguredAsyncDisposable' to 'System.IO.StreamWriter'
我已经在谷歌上搜索了一堆,读了一堆,现在和过go 都是如此,但我完全不知道如何使用这个"等待使用"的东西.我该怎么做?谢谢