0

私はメッセンジャーライブラリに取り組んでいます。メインクラスにはLoginメソッドがあります。ログインすると、すべての連絡先リストデータがダウンロードされ、ログインが完了するまで保存されます。ログインが完了すると、ダウンロードされたユーザーごとにUserAddedイベントが発生します。

現在、Loginメソッドの最後にイベントを1つずつ発生させています。これは機能しますが、UserAddedイベントハンドラー内で長時間の操作を実行すると、ライブラリコンシューマーがイベントをタイムリーに取得しないことを意味します。

これを回避する1つの方法は、各イベントを非同期で発生させることですが、これはスレッドプールを破壊します。

私は現在それを正しい方法でやっていますか?イベントハンドラー内で長時間の操作を実行することに対する警告をドキュメントに単にメモする必要がありますか?

4

1 に答える 1

1

おそらく、イベントハンドラーを変更して、スレッドセーフなキュー作業項目に単に「エンキュー」することをお勧めします。次に、キューを継続的にポンピングして実際にメッセージを処理する単一のスレッドを作成できます。そうすれば、レイズは非常に迅速に行われ、実際に作業項目のキューを処理するスレッドは1つだけです。

ただし、これを行うと、イベントを発生させてもすぐに処理されたわけではなく、アプリのロジックに影響を与える可能性があるという事実に対処する必要があります。

于 2012-04-10T00:50:52.963 に答える