問題タブ [deferred-execution]
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.
c# - コードの実行を遅らせる最善の方法は何ですか?
私は、それぞれが特定のタスクに必要な、いくつかの非同期のメソッドを互いに呼び出す多くのメソッドを持っています。それらはすべて DOM で動作します (したがって、いつでも 1 つのスレッドだけが DOM にアクセスする必要があります)。
例えば:
ここで、メソッド A() を可能な限り 1000 倍速く実行したいメソッドがあるとします (非同期メソッドは個別のスレッドで実行できますが、他のすべてのコードは一度に 1 つずつ DOM にアクセスする必要があります)。非同期呼び出しは A() のコード実行に達し、B() と C() は一時停止されるため、A() を再度呼び出すことができます。
これを行うには2つの方法が考えられます。1 つは yield で、すべてのメソッドをイテレータに変更することで、実行を一時停止および再開できます。
このメソッドは、反復子からのオーバーヘッドがかなりあり、コード集約型ですが、すべてが 1 つのスレッドで実行されるため、DOM アクセスを同期する必要はありません。
別の方法は、スレッドを使用することです (1000 の同時スレッドは悪い考えなので、ある種のスレッド プーリングを実装します) が、これにはコストのかかる DOM アクセスの同期が必要です。
これらの条件下でコードの実行を延期するために使用できる他の方法はありますか? これを行うにはどのような方法が推奨されますか?
python - アプリ エンジンでのカーソルの問題を伴うタスク チェーン。例外: クエリ オフセットが大きすぎます。他の誰かがこの問題を抱えていますか?
他の誰かがこの問題を抱えているかどうかはわかりませんが、appengine 開発サーバーでタスクをチェーンするためにカーソルを使用すると、「クエリ オフセットが大きすぎます」という例外が発生します (ライブで発生するかどうかはわかりません)。
1 回のクエリで 4000 件以上のレコードが処理された後にカーソルを要求すると、エラーが発生します。
オフセットがカーソルと関係があることを知りませんでした。おそらく、アプリ エンジン用の sdk の癖にすぎません。
修正するには、タスクが延期される前に許容される時間を短縮する (一度に処理されるレコードが少なくなるようにする) か、経過時間を確認するときに、処理されたレコードの数がまだ範囲内にあることを確認することもできます。たとえば、time.time() > end_time またはcount == 2000の場合。カウントをリセットし、タスクを延期します。2000 は任意の数値です。上限をどうするかはわかりません。
編集:
上記の変更を行った後、実行が終了することはありません。with_cursor(cursor) コードが呼び出されていますが、毎回最初から開始されているようです。明らかな何かが欠けていますか?
例外の原因となるコードは次のとおりです。
テーブル「Transact」には 4800 行あります。time.time() > end_time が true のときに、transacts.cursor() が呼び出されると、エラーが発生します。カーソルが要求された時点で 4510 レコードが処理されたため、エラーが発生したようです (開発サーバーでは、他の場所ではテストされていません)。
これが誰かに役立つことを願っています。
ありがとうバート
c# - linqを使用するときにWCFサービスから何を返すのですか?
LINQ を使用する場合、WCF サービスから何を返す必要がありますか? 例えば:
LINQ は Deferred Execution に従うため、ステートメントは for ループが実行されるまで何もしません。これは、resを返すことができないことを意味します。じゃあ何を返せばいいの?WCF サービスからデータを返すたびに、for ループを記述してオブジェクトにデータを入力し、そのリストを返す必要がありますか? 切断されたアーキテクチャに従い、異なる層間および Web サービスまたは WCF サービスからデータを移動するのに理想的な ADO.NET DataSet に相当するものはありませんか?
python - ツイスト: `defer.execute` と `threads.deferToThread` の違い
defer.execute()
ツイストとイン ツイストはどう違いthreads.deferToThread()
ますか?どちらも同じ引数 (関数とそれを呼び出すためのパラメーター) を取り、関数を呼び出した結果で起動される deferred を返します。
バージョンはthreads
、スレッドで実行されることを明示的に示しています。ただし、defer
バージョンがそうでない場合、それを呼び出すポイントは何でしょうか? リアクターで実行されるコードは決してブロックされるべきではないため、それが呼び出す関数はブロックされないようにする必要があります。その時点で、同じ結果のdefer.succeed(f(*args, **kwargs))
代わりに行うことができます。defer.execute(f, args, kwargs)
c# - Linq-延期された実行を見つける最も簡単な方法は何ですか?
どの.netフレームワークのlinqメソッド(たとえば、.IEnumerable linqメソッド)が遅延実行を使用して実装されているか、または遅延実行を使用して実装されていないかを確認する最も簡単な方法は何ですか。
何度もコーディングしているうちに、これが正しく実行されるのではないかと思います。確認する唯一の方法は、MSDNのドキュメントにアクセスして確認することです。より迅速な方法、ディレクトリ、Web上のどこかのリスト、チートシート、共有できるその他のトリックはありますか?はいの場合は、そうしてください。これは、多くのlinq初心者(私のような)がミスを減らすのに役立ちます。他の唯一のオプションは、覚えるのに十分なほどドキュメントを使用するまでドキュメントをチェックすることです(これは私にとって難しいことです。どこかにドキュメント化されて検索できる「何か」を覚えていない傾向があります:D)。
.net - using で IEnumerable を返す
私が遭遇した興味深い問題は、完全に理にかなっています。私は次のような一般的な方法を持っています:
あるケースでは、resultDelegate
の戻り型 ( TResult
) はIEnumerable<object>
です。問題は、Run
遅延実行のために関数がすぐに返され、SqlDataReader が破棄されることです。コードの後半で結果を読み込もうとすると (デリゲートが行うreader.Read()
と、InvalidOperationException: Invalid attempt to call Read when reader is closed.
これを回避する最善の方法を見つけるのに苦労しています。具体的なリストを返すことができることはわかっていますが、可能であればそれを避けたいと思います。デリゲート内で using ステートメントを移動することもできますが、すべてのデリゲートに対してこれを行うことを避けることができれば、それは素晴らしいことです。何か案は?
.net - 戻りタイプがIEnumerableであるかどうかを確認します
関数の戻り型がであるかどうかを確認するにはどうすればよいIEnumerable<T>
ですか?List<T>
つまり、を実装していても、一致させたくありませんIEnumerable<T>
。言い換えれば、関数が実行を延期したかどうかをどのように検出できますか?
linq - IQueryable Over WCF サービスを公開する
IQueryable とクエリの遅延読み込み/遅延実行について学んでいます。
この機能を WCF 経由で公開することは可能ですか? クライアントで追加のクエリを実行できる IQueryable を返す LINQ-to-SQL サービスを公開し、最後に .ToList() を使用して実行したいと考えています。このコンテキストで OData 形式はまったく適用できますか?
可能であれば、この手法の用語と、従うことができる優れたチュートリアルは何ですか? ありがとうございました。
java - メソッドが戻った後に何かをする
これは、擬似コードでの私の状況です。
プレーヤー1〜3が接続すると、プレーヤーのリストに追加され、OKが返されます。その時点で、プレーヤーは自分の側に設定を行います。ただし、プレーヤー4が接続すると、要求への応答が送信される前に、すべてのプレーヤーにカードが送信されます。プレーヤー4はまだ要求に対する応答を受け取っていないため、まだ正しく初期化されておらず、カードを受け取ったときにエラーが発生します。
私が欲しいのはこれです:
そのための一般的なパターンはありますか?onConnect関数は別のクラスにあり、onRequestの実装の詳細を認識してはなりません。
私は特にこれをJavaで実装しようとしていますが、一般的なソリューションは大歓迎です。
linq - Linqの延期された実行
私は簡単なプログラムを書きました、これはそれがどのように見えるか、いくつかの詳細は隠されています:
私の質問はこれです-明らかに、データコンテキストから選択するとき、実行は延期されます。お気づきの方もいらっしゃると思いますが、「Main」関数の最初のステートメントで、File.ReadAllLines( "accounts.txt")からクエリを実行しています。これは悪い選択ですか?最終結果を列挙すると、このステートメントは繰り返し表示されますか?
問題があることがわかっている場合は、単純に.ToArray()を実行するか、結果を事前に取得できますが、舞台裏で何が起こっているのかを知りたいと思っています。