.Net:CallBack应该在哪个线程上?

时间:2011-08-12 19:35:49

标签: .net multithreading asynchronous callback

我已经构建了一个与JSON服务对话的辅助类。该类在后台线程中完成其工作。完成后,它会调用一个Action<>客户端发送的CallBack。

最好让助手类调用Action<>主UI线程上的回调,还是线程应该是客户端的责任?

2 个答案:

答案 0 :(得分:2)

您应该提供完整的同步API,例如object Fetch()和明确标记的异步API,例如void FetchAsnyc(Callback)。也许您的客户使用不同的方法进行多任务处理,然后他可以使用您的同步API实现这一点。

UI线程确实不是你的范围。

答案 1 :(得分:0)

我希望有一个能够同时接收和发送数据的异步服务,这也提高了服务的可靠性。这种方法可以避免在遇到客户端问题时经常发生的慢消费者问题,因此服务对于这类缓慢/有问题的客户来说是安全的。

关于UI线程,这是客户端的责任。基本上客户端负责在UI线程上发送操作。

编辑:Skomski的回答让我想起了我们最近使用的一种方法

基本上服务提供如下方法:

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

因此客户端有一个选项是否传递自己的同步上下文,因此服务将在调度消息时使用它

synchronizationCOntext.Post(clientCallback, ...);

或以更直接的方式使用它。