#c# #multithreading #blazor #system.reactive #blazor-server-side
#c# #многопоточность #blazor #system.reactive #blazor-на стороне сервера
Вопрос:
В Blazor нет единого потока пользовательского интерфейса и, насколько я знаю, нет диспетчера. ComponentBase.InvokeAsync(..)
Однако существует:
protected Task InvokeAsync(Action workItem);
protected Task InvokeAsync(Func<Task> workItem);
Как мне переключиться с потока, отличного от пользовательского интерфейса, на поток пользовательского интерфейса?
IObservable<int> source ...
source.Throttle(100) // will continue on non UI thread
.ObserveOnComponent() // how do I write this?
.ObserveOn(this.InvokeAsync) // or this?
.Do(this.StateHasChanged); // something that requires UI thread
.Subscribe();
Комментарии:
1. Сервер Blazor или Blazor Wasm?
2. По крайней мере, в серверной версии есть как диспетчер, так и контекст синхронизации.
3. Это сервер blazor. Хорошо, но как мне получить к нему доступ?
4. Я не могу протестировать прямо сейчас, но я бы ожидал, что SynchronizationContext.Current будет не нулевым, и есть перегрузка observeOn, которая принимает контекст синхронизации