1

.Netでは、ファイルを非同期でアップロードする場合は、System.Net.WebClientクラスのUploadFileAsync()インスタンスメソッドを呼び出すだけで、UploadFileAsync()に渡したウェイトハンドルからシグナルを受信するまでメインスレッドをブロックします。メソッドを実行し、ファイルがアップロードされた後に呼び出されるイベントハンドラープロシージャ内で、同じウェイトハンドルを使用してメインスレッドにシグナルを送信します。この方法でファイルをアップロードすることの良い点は、ファイルのアップロードの進行状況が変更されるたびに呼び出されるイベントハンドラープロシージャをサブスクライブできることです。

Javaでは、java.net.URLConnectionクラス(または同様のもの)を使用して同様の機能を実現する簡単な方法はありますか?

4

2 に答える 2

1

はい、オブジェクトを使用ExecutorServiceして送信し、結果が返さCallableれるまで待ちます。future.get()例えば:

ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Foo> future = executor.submit(new Callable<Foo>()
{
    @Override
    public Foo call() throws Exception
    {
        // ...

        return someFoo;
    }
});

Foo result = future.get(); // result is the same as someFoo, both should refer to the same object

future.get()バックグラウンド スレッドの実行が終了するまでブロックされることに注意してくださいcall()

于 2013-02-14T00:32:30.990 に答える
0

優れた Apache Http Client の非同期バージョンがあるようです。私は自分でそれを使用していませんが、有望に見えます。

Jersey クライアントには、ニーズを満たす非同期リクエストのサポートも組み込まれています。その使用法を示すテスト クラスがあります。

少なくとも、Jersey クライアントはリクエスト完了のコールバックを提供しますが、ファイル アップロードの進捗コールバックについてはわかりません。

于 2013-02-14T00:39:27.637 に答える