Асинхронная команда ReactiveUI 6 не выполняется в фоновом потоке в приложении WPF

ViewModel

public class MyViewModel:ReactiveObject, IRoutableViewModel{
        private ReactiveList<string> _appExtensions; 

        public MyViewModel(IScreen screen){
            HostScreen = screen;
            AppExtensions = new ReactiveList<string>();

            GetApplicationExtensions =
                ReactiveCommand.CreateAsyncTask(x => _schemaService.GetApplicationExtensions()); // returns a Task<IEnumerable<string>>

            GetApplicationExtensions
                .ObserveOn(RxApp.MainThreadScheduler)
                .SubscribeOn(RxApp.TaskpoolScheduler)
                .Subscribe(p =>
                {
                    using (_appExtensions.SuppressChangeNotifications())
                    {
                        _appExtensions.Clear();
                        _appExtensions.AddRange(p);
                    }
                });

            GetApplicationExtensions.ThrownExceptions.Subscribe(
                ex => Console.WriteLine("Error during fetching of application extensions! Err: {0}", ex.Message));
        }

        // bound to a ListBox 
        public ReactiveList<string> AppExtensions
        {
            get { return _appExtensions; }
            set { this.RaiseAndSetIfChanged(ref _appExtensions, value); }
        } 

       public ReactiveCommand<IEnumerable<string>> GetApplicationExtensions { get; protected set; }
}

и вид имеет<Button Command="{Binding GetApplicationExtensions}"></Button>.

внедрениеGetApplicationExtensions

    public async Task<IEnumerable<string>> GetApplicationExtensions()
    {
        IEnumerable<string> extensions = null;

        using (var client = new HttpClient())
        {
            client.BaseAddress = BaseAddress;
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _accessToken);

            var response = await client.GetAsync("applications");

            if (response.IsSuccessStatusCode)
            {
                var json = await response.Content.ReadAsStringAsync();
                extensions = JsonConvert.DeserializeObject<IEnumerable<string>>(json);

            }

        }
        return extensions;
    }

Из всего, что я читал о ReactiveUI, и всех примеров, которые я видел (хотя для новых версий 6.0+ их крайне мало), это должно сделать мой асинхронный вызов (который делает асинхронный HTTP-запрос черезHttpClient) запустить в фоновом потоке и обновитьListBox на мой взгляд, когда результаты возвращаются из него. Однако это не так - пользовательский интерфейс блокируется на время асинхронного вызова. Что я делаю неправильно?

ОБНОВИТЬ

Если я завернул свой HTTP-вызов вTask тогда все работало как задумано - интерфейс вообще не зависал. Итак, новая реализация моего сервисного вызова такова:

    public Task<IEnumerable<string>> GetApplicationExtensions()
    {
        var extensionsTask = Task.Factory.StartNew(async () =>
        {
             IEnumerable<string> extensions = null;

             using (var client = new HttpClient())
             {
                 client.BaseAddress = BaseAddress;
                 client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _accessToken);

                 var response = await client.GetAsync("applications");

                 if (response.IsSuccessStatusCode)
                 {
                     var json = await response.Content.ReadAsStringAsync();
                     extensions = JsonConvert.DeserializeObject<IEnumerable<string>>(json);

                 }

             }
             return extensions;
        }

        return extensionsTask.Result;
    }

Кроме того, с этим изменением моего вызова асинхронной службы я мог бы удалитьObserveOn а такжеSubscribeOn от моегоReactiveCommand как предложил @PaulBetts. Так что мойReactiveCommand Реализация на мой взгляд конструктора модели стала такой:

            GetApplicationExtensions =
                ReactiveCommand.CreateAsyncTask(x => _schemaService.GetApplicationExtensions()); // returns a Task<IEnumerable<string>>

            GetApplicationExtensions
                .Subscribe(p =>
                {
                    using (_appExtensions.SuppressChangeNotifications())
                    {
                        _appExtensions.Clear();
                        _appExtensions.AddRange(p);
                    }
                });

Ответы на вопрос(2)

Ваш ответ на вопрос