我已經構建了一個與JSON服務對話的幫助類。該類在後臺線程中工作。完成後,它會調用客戶端發送的一個Action回撥。.Net:CallBack應該在哪個線程上?
是否最好讓助手類在主UI線程上調用Action回調,或者線程是客戶端的責任?
我已經構建了一個與JSON服務對話的幫助類。該類在後臺線程中工作。完成後,它會調用客戶端發送的一個Action回撥。.Net:CallBack應該在哪個線程上?
是否最好讓助手類在主UI線程上調用Action回調,或者線程是客戶端的責任?
您應該提供完整的同步API,如object Fetch()
和明確標記的異步API,如void FetchAsnyc(Callback)
。也許你的客戶使用不同的方法來處理多任務,然後他可以用你的同步API來實現這一點。
而UI線程真的不是你的範圍。
我會主張有一個異步服務,它可以同時接收和發送數據,這也增加了服務的可靠性。這種方法可以避免在客戶端問題時經常發生的慢速消費者問題,因此服務可以避免這類緩慢/有問題的客戶。
關於UI線程,這是客戶端的責任。基本上客戶端負責在UI線程上發送操作。
編輯:Skomski的答案回憶我,我們最近使用
基本服務提供了諸如以下方法的方法:
void Subscribe(IEnumerable<TMessage> messages);
void Subscribe(IEnumerable<TMessage> messages, SynchronizationContext synchronizationContext);
所以客戶有一個選項是否通過自己的同步上下文,這樣的服務將使用它當調度消息時
synchronizationCOntext.Post(clientCallback, ...);
或以更直接的方式使用它。