在WPF应用程序中实现ICommand类的
Execute()
方法中,我有一个对外部方法的调用,该方法返回一个Task
对象。
ICommand类: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()
);
}
服务类:
public Task<object> AmendAsync(CancellationToken cancellationToken, object arg1)
{
return Task<object>.Factory.StartNew
(
() =>
{
...
},
cancellationToken,
TaskCreationOptions.None,
TaskScheduler.Default
);
}
我的问题是:
- 哪个线程调用了ICommend Execute()方法?是UI线程吗?
cancelTask.ContinueWith()
会在UI线程还是后台线程上等待?即,如果Task
需要很长时间而且正在等待UI线程,那么UI可能会被冻结。