C# ContinueWith()不';在主机进程结束之前不执行

C# ContinueWith()不';在主机进程结束之前不执行,c#,wpf,multithreading,.net-4.0,task-parallel-library,C#,Wpf,Multithreading,.net 4.0,Task Parallel Library,我们的团队遇到了一个问题,ContinueWith()在主机进程关闭之前无法运行。例如,下面的代码在一年的生产中运行良好。但自从我们开始使用框架的更新版本以来,我们就遇到了这个问题 运行此代码时,this.Sites=GetViewableSites()运行,然后调试时不会发生任何其他情况。点击F10后,调试器返回UI。只有在用户关闭UI后,ContinueWith()才会执行 this.PerformBusyAction(() => { this.Sites = GetViewa

我们的团队遇到了一个问题,
ContinueWith()
在主机进程关闭之前无法运行。例如,下面的代码在一年的生产中运行良好。但自从我们开始使用框架的更新版本以来,我们就遇到了这个问题

运行此代码时,
this.Sites=GetViewableSites()运行,然后调试时不会发生任何其他情况。点击
F10
后,调试器返回UI。只有在用户关闭UI后,
ContinueWith()才会执行

this.PerformBusyAction(() =>
{
    this.Sites = GetViewableSites();
}, ViewModelResource.LoadingForm)
.ContinueWith(originatingTask =>
{
    // ** This doesn't execute until the user closes the UI **
    if (originatingTask.Exception == null)
    {
        PerformPostSuccessfulInitialization();
        return;
    }
    PerformPostUnsuccessfulInitialization(originatingTask.Exception.InnerExceptions);
});
为了完整起见,这里是
PerformBusyAction()

知道这是什么原因吗?我们可以说,罪魁祸首是我们的框架,也许是,但我们还没有弄清楚这是如何发生的。为了解决这个问题,我们只是停止使用
ContinueWith()
,将所有代码放在第一部分/任务中

编辑

也许这是一个错误?尽管
Console.ReadKey()
也存在类似的问题

编辑2-调用GetViewableSites()后立即调用堆栈

未标记>6324 6工作线程工作线程 线程Acme.Mes.Apps.Derating.ViewModels.Controls.globaltabcontrolleviewmodel.Initialize.AnonymousMethod_uu9 Normal Acme.Mes.Apps.Derating.ViewModels.dll!Acme.Mes.Apps.Derating.ViewModels.Controls.GlobalTabControlViewModel.Initialize.AnonymousMethod_uu9() 第361行
Acme.Mes.Client.dll!Acme.Mes.Client.Mvvm.MvvmTools.ViewModelBase.PerformBusAction.AnonymousMethod_u_uC() 第494行+0xe字节
mscorlib.dll!System.Threading.Tasks.Task.InnerInvoke()+0x49字节
mscorlib.dll!System.Threading.Tasks.Task.Execute()+0x2e字节
mscorlib.dll!System.Threading.Tasks.Task.ExecutionContextCallback(对象 obj)+0x15字节
mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext,System.Threading.ContextCallback,对象 状态,布尔保持同步CTX)+0xa7字节
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext,System.Threading.ContextCallback,对象 状态,布尔保持同步CTX)+0x16字节
mscorlib.dll!System.Threading.Tasks.Task.ExecuteWithThreadLocal(参考 System.Threading.Tasks.Task currentTaskSlot)+0xcb字节
mscorlib.dll!System.Threading.Tasks.Task.ExecuteEntry(bool bPreventDoubleExecution)+0xb3字节
mscorlib.dll!System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() +0x7字节
mscorlib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch()+0x149 字节数
mscorlib.dll!System.Threading.\u ThreadPoolWaitCallback.PerformWaitCallback() +0x5字节
[本机到托管转换]


尝试使用dispatcher访问IsBusyMessage和BusyMessage

Dispatcher.BeginInvoke((Action) (() =>
    {
        this.IsBusy = false;
        this.BusyMessage = String.Empty;
    }));

您是否尝试过不使用任何UI控件的
任务
s?此处没有UI控件。这些都是视图模型和基类的东西。您是否能够生成一个小而完整的示例来演示这个问题?IsBusy=false做什么?看起来它会击中用户界面…我记得我们以前也经历过。同样的方法,您确实需要发布线程的堆栈跟踪。没有人能看到“GetViewableSites”可能在做什么。
Dispatcher.BeginInvoke((Action) (() =>
    {
        this.IsBusy = false;
        this.BusyMessage = String.Empty;
    }));