我已经构建了一个与JSON服务对话的辅助类。该类在后台线程中完成其工作。完成后,它会调用一个Action<>客户端发送的CallBack。
最好让助手类调用Action<>主UI线程上的回调,还是线程应该是客户端的责任?
答案 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, ...);
或以更直接的方式使用它。