2011-08-12 7 views
3

私はJSONサービスと通話するヘルパークラスを構築しました。クラスはバックグラウンドスレッドでその作業を行います。完了すると、クライアントが送信したアクション<>コールバックを呼び出します。.Net:コールバックはどのスレッドにあるべきですか?

メインUIスレッドでヘルパークラスがコールバックを呼び出すのが最善ののですか?またはスレッディングがクライアントの責任であるべきですか?

答えて

2

object Fetch()のような完全な同期APIと、void FetchAsnyc(Callback)のような明示的にマークされた非同期APIを提供する必要があります。多分あなたのクライアントは、マルチタスキングのために別のアプローチを使用し、次に彼はあなたの同期APIでこれを実装することができます。

UIスレッドは実際にあなたの範囲ではありません。

0

私はデータを同時に送受信できる非同期サービスを提供することを前提としています。これにより、サービスの信頼性も向上します。このアプローチは、クライアント側の問題の場合にしばしば起こる低消費者問題を避けることができるので、サービスは遅く/問題の多いクライアントから安全です。

UIスレッドに関しては、これはクライアントの責任です。基本的にクライアントはUIスレッドにアクションをディスパッチします。

EDIT:Skomskiの答えは私に、我々は最近、

を使用していたアプローチを思い出し、基本的サービスは、次のような方法を提供しています。

void Subscribe(IEnumerable<TMessage> messages); 
void Subscribe(IEnumerable<TMessage> messages, SynchronizationContext synchronizationContext); 

ので、クライアントはサービスがそれを使用しますので、独自の同期コンテキストを渡すかどうかのオプションを持っていますメッセージをディスパッチするとき

synchronizationCOntext.Post(clientCallback, ...); 

またはより簡単な方法でそれを使用してください。