я сильно использовать UniRx в моем проекте, но я нахожу проблему, когда я первый звонок SchedulerOn(Scheduler.MainThread)
он не будет делать вещи, оставленные в главном thread.Uses кода, как это:UniRx SchedulerOn MainThread не работает в первый раз вызвать
Login (new LoginReq (account.text, pwd.text, 1L)).SchedulerOn(Scheduler.MainThread).Done (x => {
Debug.Log("login req thread - " + System.Threading.Thread.CurrentThread.ManagedThreadId);
Package.Log("Login response - " + x.ToString());
if(x.errorMsg == null) {
Package.Log("login success - " + x.ToString());
//choice game world -> choice role
enterObj.SetActive(true);
loginObj.SetActive(false);
} else {
rspTips.text = x.ToString();
}
});
Вывод показывает, что SetActive может быть вызван в основном потоке.
Проблема возникла особенно при открытии ПК и первом запуске приложения.
Это связано с тем, что .NET разогревается? Я не уверен, как работает диспетчер потоков.
UPDATE
Я думаю, что я потеря некоторые важные вещи.
Login
возвращение RSG.IPromise<T>
(git home page at here), который используется для легкой задачей asyc но RSG.Promise
Lib не имеет планировщик module.So Я обернуть SchedulerPromise
с UniRx
«s IScheduler
и код не имеет новую технологию. See this please about the wrapper source code
Я застрял здесь долгое время. Спасибо за любые советы.
В какой библиотеке/пространствах имен это 'SchedulerOn' на самом деле существует? – supertopi
@supertopi, это равно 'SubscribeOn', извините, не объясните это. Я добавляю деталь в ** UPDATE ** – LoranceChen
Если я попробую и вызывать код Unity с obvserver, я получаю ', может быть вызван только из основного потока. Конструкторы и инициализаторы полей будут выполняться из загружаемого потока при загрузке сцены. ' Если я не поставил '.ObserveOnMainThread()' – sentece