0

多くのWebリクエストを実行するMonodroidアプリケーションがあります。活動からの依頼をしています。このため、アクティビティ以外でリクエストを処理するためのキューが必要です。これは、同時に複数のリクエストが行われるのを防ぐためです。

ThreadPool.QueueUserWorkItemを使用して別のスレッドでリクエストを行っているため、ユーザーがアクティビティを開き、リクエストを開始してから戻って別のアクティビティを開き、最初のリクエストがWebリクエストの使用を終了する前に別のリクエストを開始すると、ロックアップされます。機能しなくなりました。

アクティビティの外部でコールバックを使用してリクエストタスクをキューに入れるのが最善のアプローチですか、それとも誰かが似たような例を知っている/持っていますか?上記で説明したように、タスクが完了する前にアクティビティが閉じられたり破棄されたりする可能性がある場合に対処する必要があると思います。これは、タスクがキャンセルされるか、タスクが実行される可能性があるが、UIが存在しないために更新されない可能性があることを意味する場合があります。

私の場合、私が行うリクエストは、さまざまなことを行うさまざまな関数内にあるため、UIを更新するためのコールバックは常に同じ関数であるとは限りません。また、リクエストを行うために使用している関数には、さまざまなパラメーターがあります。これらの点によって、この問題の解決策を作成するのが難しく/簡単になるかどうかはわかりませんが、コードの多くをやり直す必要があると思います。

4

1 に答える 1

1

a)非同期メソッドを使用してリクエストを作成し、スレッドプールスレッドをハングさせないようにします。

b)要求しているドメインの接続制限を増やします。

ServicePointManager.FindServicePoint(uri).ConnectionLimit=10000;
于 2012-06-21T22:47:42.160 に答える