Все задачи заблокированы из ContinueWith [C #] .. во время вызова Task.Delay, ожидающего значение, которое должно быть изменено другими задачами - PullRequest
0 голосов
/ 08 июня 2019
string VariableA
string VariableB
string VariableC

void Main(){
   run((string result){A= result;});
   run((string result){B = result;});
   run((string result){C = result;});

   Task.Run(async ()=>{
            while (A == null)
                 await Task.delay(100);
            })
            ... unreachable code
            ... when breaking here >> t.Result holds a value but the owner task is Blocked in task window
}

void run(Action<string> action){
    Task.Run( async ()=>{ Some Operations; } )
    .ContinueWith((t, o) => {
                             Application.Current.Dispatcher.Invoke(() => {
                                                         action(t.Result);
                                                                  }) ; 
                             }, SynchronizationContext.Current);
}

Требуется навсегда ... и после отладки ... Я обнаружил, что результаты задачи были получены, но не могут быть пропущены с помощью действия продолжения ... которое заполняет цикл while навсегда

.

SynchronizationContext.Current используется в ContinueWith

1 Ответ

0 голосов
/ 11 июня 2019

Вызов прогона Initializing the tasks из конструктора было совершено преступление ..

Просто переместив его в конструктор элемента управления .. оно было раскрыто!

...