Не совсем уверен, что здесь происходит -TaskScheduler.FromCurrentSynchronizationContext исключение при вызове из рабочего потока
Этот бит кода вызывает проблемы, так как он первый из основной нити (проверено с точки зрения задач в VS) и планирование задачи, однако при установке точки останова в UpdateSearchCache
мы сейчас в рабочем потоке - больше не основной!
Последующие фрагменты кода пользовательского интерфейса, вызываемые оттуда, не могут выполняться в рабочем потоке.
Разве это не все, что нужно для определения планировщика? Что мне не хватает?
Этот код вызывается при запуске нашего приложения. Он вызывается из Bootstrapper нашего приложения PRISM и работает на MainThread.
SynchronizationContext.Current
не имеет значения, когда задача запущена.
var currentScheduler = TaskScheduler.FromCurrentSynchronizationContext();
var ctx = SynchronizationContext.Current;
if (ctx == null)
throw new NullReferenceException();
Task.Factory
.StartNew(
() =>
SearchHelper.CacheSearchResults(_service.GetData())
.ContinueWith(result => UpdateCache(result.Result), currentScheduler);
Выполняется ли первая строка фрагмента кода в основном потоке пользовательского интерфейса? Если да, выполняете ли вы это на 'Form.Load' и т. Д., Который находится внутри цикла ядра Application.Run? – Noseratio
Да, это основной поток. – cacau
Прежде чем сохранить его, сделайте следующее: 'Debug.Assert (SynchronizationContext.Current! = Null)'. Проходит ли это? – Noseratio