84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
一个返回值为User的方法,在内部调用了异步方法(比如Rxjava,或者异步的网络请求),其内部匿名函数内才能拿到user对象,那么我的方法应该怎么return这个对象?
学习是最好的投资!
メソッドの戻り値は user であるため、このメソッドは非同期メソッドとは言えません。このメソッドがフューチャー、または後で結果を取得できる参照のようなものを返さない限り、このメソッドは非同期メソッドと呼ぶことができます。メソッドを調整した後にユーザーを取得したい場合は、メソッドに非同期コードを配置する必要はありませんが、まったく意味がありません。
非同期結果はコールバックを通じてのみ返されます。
同期方法は通常こんな感じです
heavyWork メソッドはデータベースのチェックや大量の計算を必要とする場合があるため、heavyWork メソッドの実行には時間がかかります。 長時間待ちたくない場合は、非同期が便利です。
この時点で、heavyWork は別のスレッドに渡されて実行され、Future が返されます。 その後、この将来の get メソッドを通じて必要なユーザーを取得できます。
これが非同期の意味と有用性です。タイトル自体が矛盾しています。非同期コードを含むメソッドで非同期実行の結果を返すことは矛盾します。
私は RxJava を勉強したことはありませんが、前のチームで Android 開発をしていた同僚は、RxJava がとても便利だと言いました。
1階ではFutureを使った解決策を紹介しましたが、残念ながらFutureは非同期ブロッキングAPI、つまり通知コールバックがありません。
コールバックの実装方法については、オブザーバー パターンを見てください。本質は、インターフェイスの多態性の特性を使用することです。
ただし、ListenableFuture と呼ばれる強化された Future を提供する Google guava を使用することもできます。
1階の作例を引用し、修正させていただきました。
非同期メソッドの「リターン」は、コードが実行される前に発生します。コードはまだ実行されていません。結果はどのように返されるのでしょうか?
コールバックメソッドを使うことも可能だと思います
CountDownLatch を使用して、非同期操作を同期操作に変換します。
最終 CountDownLatch ラッチ = 新しい CountDownLatch(1);
非同期コールバック結果では、latch.countDown()
{を試してください リーリー
}
Java には Callable インターフェイスを返すスレッドがあります
rx.java は使用したことがありません ですが、Android でのメソッドは知っています。お役に立てれば幸いです。 おっしゃるとおり、メインメソッドで非同期の戻り結果を使う場合は、スレッド間の通信を考慮する必要があるとのことですつまり、ハンドラを先に書いて、データを受け取るメソッドを書いて実行するということになります。データが到着したらメソッド を実行し、サブスレッドの完了後にデータをハンドラーに送信します。
メソッドの戻り値は user であるため、このメソッドは非同期メソッドとは言えません。このメソッドがフューチャー、または後で結果を取得できる参照のようなものを返さない限り、このメソッドは非同期メソッドと呼ぶことができます。メソッドを調整した後にユーザーを取得したい場合は、メソッドに非同期コードを配置する必要はありませんが、まったく意味がありません。
非同期結果はコールバックを通じてのみ返されます。
同期方法は通常こんな感じです
リーリーheavyWork メソッドはデータベースのチェックや大量の計算を必要とする場合があるため、heavyWork メソッドの実行には時間がかかります。
リーリー長時間待ちたくない場合は、非同期が便利です。
この時点で、heavyWork は別のスレッドに渡されて実行され、Future が返されます。
その後、この将来の get メソッドを通じて必要なユーザーを取得できます。
これが非同期の意味と有用性です。タイトル自体が矛盾しています。非同期コードを含むメソッドで非同期実行の結果を返すことは矛盾します。
私は RxJava を勉強したことはありませんが、前のチームで Android 開発をしていた同僚は、RxJava がとても便利だと言いました。
1階ではFutureを使った解決策を紹介しましたが、残念ながらFutureは非同期ブロッキングAPI、つまり通知コールバックがありません。
コールバックの実装方法については、オブザーバー パターンを見てください。本質は、インターフェイスの多態性の特性を使用することです。
ただし、ListenableFuture と呼ばれる強化された Future を提供する Google guava を使用することもできます。
1階の作例を引用し、修正させていただきました。
リーリー非同期メソッドの「リターン」は、コードが実行される前に発生します。コードはまだ実行されていません。結果はどのように返されるのでしょうか?
コールバックメソッドを使うことも可能だと思います
CountDownLatch を使用して、非同期操作を同期操作に変換します。
最終 CountDownLatch ラッチ = 新しい CountDownLatch(1);
非同期メソッドを呼び出します。非同期コールバック結果では、
それからlatch.countDown()
{
} catch (InterruptedException e) {を試してください リーリー
}
データを返す;Java には Callable インターフェイスを返すスレッドがあります
rx.java は使用したことがありません
ですが、Android でのメソッドは知っています。お役に立てれば幸いです。
おっしゃるとおり、メインメソッドで非同期の戻り結果を使う場合は、スレッド間の通信を考慮する必要があるとのことです
つまり、ハンドラを先に書いて、データを受け取るメソッドを書いて実行するということになります。データが到着したらメソッド
を実行し、サブスレッドの完了後にデータをハンドラーに送信します。