.Net: CallBack должен быть в каком потоке? - PullRequest
3 голосов
/ 12 августа 2011

Я создал вспомогательный класс, который общается со службой JSON. Класс выполняет свою работу в фоновом потоке. Когда это сделано, он вызывает Action <> CallBack, который отправил клиент.

Лучше ли, чтобы вспомогательный класс вызывал обратный вызов Action <> в главном потоке пользовательского интерфейса, или ответственность за многопоточность лежит на клиенте?

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

Вы должны предоставить полный синхронный API, например object Fetch(), и явно помеченный асинхронный API, например void FetchAsnyc(Callback). Возможно, ваш клиент использует другой подход к многозадачности, тогда он может реализовать это с вашим синхронным API.

И поток пользовательского интерфейса на самом деле не ваша сфера.

0 голосов
/ 12 августа 2011

Я бы предпочел иметь асинхронный сервис, который мог бы получать и отправлять данные одновременно, это также повышает надежность сервиса.Такой подход позволяет избежать проблемы Slow Consumer, которая часто возникает в случае проблем на стороне клиента, поэтому служба будет защищена от таких медленных / проблемных клиентов.

Что касается потока пользовательского интерфейса, то это ответственностьклиент.В основном клиент отвечает за отправку действий в потоке пользовательского интерфейса.

РЕДАКТИРОВАТЬ: ответ Скомски напомнил мне подход, который мы использовали недавно

В основном сервис предоставляет методы, подобные следующим:1009 * Таким образом, у клиента есть возможность передать собственный контекст синхронизации, чтобы служба использовала его при отправке сообщений

synchronizationCOntext.Post(clientCallback, ...);

или использовала его более простым способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...