問題タブ [completionhandler]
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.
java - AsynchronousByteChannel のスレッド化の影響
AsynchronousByteChannel.read()の Javadoc には、操作が非同期で行われると書かれていますが、ストリームの終わりに到達するとどうなりますか? 実装は、read() を呼び出した同じスレッド内で完了ハンドラーを起動できますか? 実装の観点からは、結果が既にわかっているため、この操作を非同期で実行する理由はありません。同様に、ユーザーが、remaining() が 0 を返す ByteBuffer に読み込もうとすると、読み取り操作は 0 を返さなければならないことがわかります。
私自身の AsynchronousByteChannel 実装で競合状態に陥ったため、質問します。操作が完了すると、それ自体で notify() を呼び出す完了ハンドラーを呼び出しています。次に、次のユーザー コードを呼び出します。
ユーザーは、操作が完了するとハンドラーに通知されると想定していますが、read() は実際には完了ハンドラーを同期的に呼び出すため、wait() の前に通知され、後者は永久にブロックされます。
仕様では、別のスレッドで CompletionHandler を更新する必要がありますか?それとも、read() を呼び出すスレッドが一部の操作を同期的に実行する可能性があるという事実をユーザーが認識する必要がありますか?
ios - NSURL 接続 sendAsynchronousRequest 応答を保存するには?
私は次の方法を持っています:
今、ブロック/ハンドラーから値を返そうとしましたが、明らかにこれは不可能です (または、まだ構文を理解していません)。
応答 (データ) の値を取得するためにローカル変数を設定しようとしましたが、エラーが発生します。
エラーが発生しない唯一の方法は、クラス プロパティを使用することです。しかし、[自己返信] の値を読み込もうとすると null であり、決して設定されていないと思います。
sendAsync 関数がスレッド化され、非同期であることを理解しています。[self reply] の値が null である理由は、sendSynchronousRequest を使用すると、常に応答が得られることです。
私は何を間違っていますか、どうすれば completionHandler 内から値を返すことができますか???
編集#1:私は何か非常に間違ったことをしているように見えます。コードをトレースしていて、同期送信を使用すると、すべて正常に機能しました。非同期のものを使用すると、 sendAsynchronousRequest への実際の呼び出しが実行されなかったため、スレッドが呼び出されていないため、値が空のと思われました。
編集#2:次を追加することで、これを回避する方法を見つけました:
ただし、それがどのように機能するかを完全に理解しているわけではありません。RunLoop が非同期操作を 2 秒間実行するように指示していると思います (日付間隔を低い値に設定すると、ライブ サーバーでのテストにより null 応答が返されるため、確認できます)。私が理解していないのは、RunLoop に実行を指示しただけで、現在のスレッドが終了していないかのように、すべてを永久にブロックし続けることです。
java - CompletionHandlersとリクエストよりも小さいByteBufferを使用してリクエストを読み取る方法は?
私はJava7とを使用していますAsynchronousSocketChannel
。リクエスト(例HTTP POST
)を読みたいのですが、使用しているサイズよりも大きい場合は、リクエスト全体を読むための優れた解決策を見つけるのに苦労していByteBuffer
ます。たとえば、ByteBuffer
が4048バイトで、HTTPPOSTに4kBより大きい画像が含まれている場合。
このための優れた再帰的ソリューションまたはループはありますか?
リクエストを読み取るための私のコードは次のとおりです。
そして私が書いたところ:
コードを再利用するのに適した場所のように見えますが、良い解決策を思い付くことができません。ここでCompletionHandlerを再利用する方法はありますか?限られたリクエストで完全なリクエストを読むための提案はありByteBuffer
ますか?
これをノンブロッキングで非同期の方法で解決したいと思います。
ios - reverseGeocodeLocation:でアドレス文字列を設定し、メソッドから戻る
開始点と終了点をアドレス文字列にローカライズして、に格納できるようにしようとしていますNSUserDefaults
。問題は、メソッドが実行を継続し、変数を設定しないことです。
これは私のアプリケーションデバッガーが示すものです:
eindeを開始します
たとえば、私の場所の住所が「Mainstreet 32、CITY」の場合。次に、私が見たいのは次のとおりです。
Mainstreet 32、
CITYEinde を開始します
問題は、コードが終了を待たないCLGeocoder
ため、変数returnAddress
が返されたときに変数が設定されず、空であるということです。
誰かがこれを回避する方法を知っていますか?
ios - 完了ハンドラーまでの CLGeocoder の遅延
文字列から緯度/経度値へのジオコーディングが必要なアプリがあります。iOS クラス リファレンスのジオコーダーを使用します。
しかし、完了ハンドラーは必要なときに呼び出されます (つまり、これらの緯度/経度の値を使用するコードがありますが、それらが使用可能になる前に呼び出されます)
何かご意見は?
java - ForkJoinTask 完了ハンドラー
JavaFutureTask
はテンプレート メソッドを提供しますdone()
。このメソッドをオーバーライドすると、「完了ハンドラの登録」が可能になります。
の完了ハンドラを登録することは可能ForkJoinTask
ですか?
アプリケーションでブロッキング スレッドを使用したくないので質問していますが、result = ForkJoinPool.invoke(myForkJoinTask)
またはの呼び出しを介して計算結果を取得するとすぐに、アプリケーションでブロッキング スレッドが使用されますresult = ForkJoinPool.submit(myForkJoinTask).get()
。