私が使ってこれを行うことができますusing var
:
await foreach (var response in _container.GetItemQueryStreamIterator(query))
{
using var safeResponse = response;
//use the safeResponse
}
または私はこれを行う必要があります:
await foreach (var response in _container.GetItemQueryStreamIterator(query))
{
try {
//use response
} finally {
response?.Dispose();
}
}
または、イテレータがでIAsyncDisposable
あり、await foreach
それを実行してくれるので、破棄せずにそのまま実行できますか?
await foreach (var response in _container.GetItemQueryStreamIterator(query))
{
//use the response
}
IEnumerable<IDisposable>
(その中にあるかどうかにかかわらずAsync
)与えられて、誰が要素を処分するべきかについての規則はありません。そのため、(そしてうまくいけば)それを列挙してもその要素は破棄されません。
要素を処分することはあなたの責任です。
あなたの質問では、それらを破棄したいので、オプション3は不可能であり、自分で破棄する必要があります。
オプション1と2は同等ですが、どちらも臭いがします。
あなたは書くことができます:
await foreach (var item in enumerable)
{
await using (item)
{
..
}
}
// by playing with your autoformatter
await foreach (var item in enumerable) await using (item)
{
..
}
悲しいことに、私はこれ以上の解決策を見ませんでした。そして、同じように見えますあなたがValueTypeにして作業する場合に注意する必要があります。多分私達はこのような何かを求めるべきです:
await foreach(await using var e in c)
もちろん、誰かがすでにそれを求めている編集。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加