一尘不染

当前的SynchronizationContext不能用作TaskScheduler

c#

我正在使用Tasks在ViewModel中运行长时间运行的服务器调用,并且Dispatcher使用整理了结果TaskScheduler.FromSyncronizationContext()。例如:

var context = TaskScheduler.FromCurrentSynchronizationContext();
this.Message = "Loading...";
Task task = Task.Factory.StartNew(() => { ... })
            .ContinueWith(x => this.Message = "Completed"
                          , context);

当我执行应用程序时,这工作正常。但是,当我运行NUnit测试时,Resharper我收到的错误消息FromCurrentSynchronizationContext为:

当前的SynchronizationContext可能不用作TaskScheduler。

我猜这是因为测试是在工作线程上运行的。如何确保测试在主线程上运行?欢迎其他任何建议。


阅读 1059

收藏
2020-05-19

共1个答案

一尘不染

您需要提供一个SynchronizationContext。这是我的处理方式:

[SetUp]
public void TestSetUp()
{
  SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
}
2020-05-19