Im Execute()
eine Klasse, die in einer ICommand
WPF Anwendung implementiert, ich habe einen externen Anruf auf ein Verfahren, das eine Task
ICommand() Task.ContinueWith()
ICommand Klasse gibt:
public static void Execute(object parameter)
{
Cancel(arg1, arg2);
}
private static void Cancel(IList<object> arg1, object arg2)
{
Task<object> cancelTask = service.AmendAsync
(
CancelTokenSource.Token,
object arg2
);
ProcessCancellingResponse(arg1, arg2);
}
private static void ProcessCancellingResponse(IList<object> arg1, Task<object> cancelTask)
{
cancelTask.ContinueWith
(
task =>
{
Update(task.Result.Response);
},
CancelTokenSource.Token,
TaskContinuationOptions.AttachedToParent | TaskContinuationOptions.OnlyOnRanToCompletion,
TaskScheduler.FromCurrentSynchronizationContext()
);
}
Service-Klasse:
public Task<object> AmendAsync(CancellationToken cancellationToken, object arg1)
{
return Task<object>.Factory.StartNew
(
() =>
{
...
},
cancellationToken,
TaskCreationOptions.None,
TaskScheduler.Default
);
}
Meine Fragen sind
- Welcher Thread ruft den ICommend Execute() auf Ist es der UI-Thread?
- Wird die
cancelTask.ContinueWith()
auf den UI-Thread oder auf einen Hintergrund Thread warten? Wenn dieTask
lange dauert und auf dem UI-Thread wartet, kann die Benutzeroberfläche einfrieren.
die Antwort von Dudi Keleti Nach mir mehr von dem Code hinzugefügt habe, die mich um herauszufinden, führen, dass der zugrunde liegende Service-Aufruf ruft eigentlich eine Aufgabe