問題タブ [iasyncenumerable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
razor-pages - Razor ページで IAsyncEnumerable を使用して、マークアップを段階的に表示できますか?
Blazor と C# 8.0 の IAsyncEnumerable 機能をいじっています。Razor Pages 内で IAsyncEnumerable を使用して await を使用して、データを含むマークアップを段階的に表示することは可能ですか?
サービス例:
カミソリページの例:
これにより、エラー CS4033 が発生します: 'await' 演算子は、非同期メソッド内でのみ使用できます。このメソッドを「async」修飾子でマークし、戻り値の型を「Task」に変更することを検討してください。
これが可能であれば、何かアイデアはありますか?
c# - IAsyncEnumerable に CancellationToken を強制的に適用させる方法
編集:この質問の要件が変更されました。以下の更新セクションを参照してください。
IAsyncEnumerable<int>
200ミリ秒ごとに1つの数値(数値のストリーム)を生成する非同期反復子メソッドがあります。このメソッドの呼び出し元はストリームを消費しますが、1000 ミリ秒後に列挙を停止したいと考えています。したがって、 aが使用され、トークンが引数として拡張メソッドCancellationTokenSource
に渡されます。WithCancellation
しかし、トークンは尊重されません。列挙は、すべての数値が消費されるまで続きます。
出力:
12:55:17.506 > 1
12:55:17.739 > 2
12:55:17.941 > 3
12:55:18.155 > 4
12:55:18.367 > 5
12:55:18.570 > 6
12:55:18.772 > 7
12 :55:18.973 > 8
12:55:19.174 > 9
12:55:19.376 > 10
期待される出力は、TaskCanceledException
5 番目の後に発生するWithCancellation
です。 が実際に何をしているのかを誤解しているようです。メソッドは、提供されたトークンをイテレータ メソッドに渡すだけです (イテレータ メソッドがトークンを受け入れる場合)。それ以外の場合、私の例のメソッドと同様にGetSequence()
、トークンは無視されます。私の場合の解決策は、列挙体の本体内のトークンを手動で調べることだと思います。
これは簡単で、うまく機能します。しかし、いずれにせよ、私が期待していたことを実行する拡張メソッドを作成してWithCancellation
、後続の列挙内にトークンを焼き付けることができるかどうか疑問に思います。これは、必要なメソッドの署名です。
更新: この質問をしたとき、キャンセルの概念全体の目的について誤った理解をしていたようです。キャンセルは の待機の後にループを壊すことを目的としているのMoveNextAsync
に対し、実際の目的は待機自体をキャンセルすることであるという印象を受けました。私の些細な例では、待機は 200 ミリ秒しか持続しませんが、実際の例では、待機はさらに長くなり、無限になることさえあります。これに気付いた後、現在の形式の私の質問にはほとんど価値がなく、削除して同じタイトルの新しい質問を開くか、既存の質問の要件を変更する必要があります。どちらのオプションも、ある意味で悪いです。
私は2番目のオプションを選択することにしました。したがって、私は現在受け入れられている回答を受け入れません。すぐに効果のある方法でキャンセルを強制するという、より困難な問題に対する新しい解決策を求めています。つまり、トークンをキャンセルすると、数ミリ秒で非同期列挙が完了するはずです。望ましい動作と望ましくない動作を区別するための実用的な例を挙げましょう。
出力 (望ましい):
0:00.242 > 1
0:00.467 > 2
0:00.500 > キャンセル
出力 (望ましくない):
0:00.242 > 1
0:00.467 > 2
0:00.707 > キャンセル
GetSequence
最初の例と同じ方法で、200 ミリ秒ごとに 1 つの数値をストリーミングします。このメソッドはキャンセルをサポートしていません。前提として、それを変更することはできません。WithEnforcedCancellation
この問題を解決するために必要な拡張メソッドです。
c# - IAsyncEnumerable の Linq メソッド
を使用する場合、、 、などの名前空間IEnumerable<T>
の組み込み拡張メソッドが使用されます。System.Linq
Skip
Where
Select
MicrosoftIAsyncEnumerable
が C#8 に追加したとき、これをサポートする新しい Linq メソッドも追加しましたか?
もちろん、これらのメソッドを自分で実装することも、それを行うパッケージを見つけることもできますが、言語標準のメソッドが存在する場合はそれを使用したいと思います。
c# - C# 8 非同期ストリームと REST/RPC の比較
この質問は私の無知を証明するものだと確信していますが、これを理解するのに苦労しています. 良い答えを得るために、ばかげた質問を喜んでします。
非同期ストリームについて私が読んだすべての投稿は、機能をうまく誇示していますが、なぜそれが別の方法よりも改善されているのかを説明していません.
あるいは、古き良きクライアント/サーバー通信で非同期ストリームを使用する必要があるのはいつでしょうか?
大きなファイルのコンテンツをストリーミングすることが非同期ストリームの適切な使用法であることがわかりますが、私が見た多くの例では、非同期ストリームを使用して小さなセンサー データ (温度など) を送信しています。温度センサーを備えた IoT デバイスは、サーバーにデータを HTTP POST するだけで、サーバーが応答できるようです。その場合、サーバーが非同期ストリームを実装するのはなぜですか?
あなたがその言葉を理解するのに苦労しているので、私はすでにあなたの痛みを感じることができますが、私を憐れんでください. :)
リクエストに応じて、私が混乱したいくつかの例を以下に示します。見つけ次第、さらに投稿しますが、先に進んで始めたいと思いました。
- .NET Conf 基調講演の前半は、大規模な非同期ストリームのデモでした...なぜ彼らがここで非同期ストリームを使用しているのか理解できませんでした: https://www.youtube.com/watch?v=1xQE2bWkwjo&list=PLReL099Y5nRd04p81Q7p5TtyjCrj9tz1t&index=4&t =
- これは私を混乱させた別の例です