【发布时间】:2012-01-04 23:10:30
【问题描述】:
我正在使用Tasks 在我的 ViewModel 中运行长时间运行的服务器调用,结果使用TaskScheduler.FromSyncronizationContext() 编组回Dispatcher。例如:
var context = TaskScheduler.FromCurrentSynchronizationContext();
this.Message = "Loading...";
Task task = Task.Factory.StartNew(() => { ... })
.ContinueWith(x => this.Message = "Completed"
, context);
当我执行应用程序时,这工作正常。但是当我在Resharper 上运行我的NUnit 测试时,我在调用FromCurrentSynchronizationContext 时收到错误消息:
当前的 SynchronizationContext 不能用作 TaskScheduler。
我猜这是因为测试是在工作线程上运行的。如何确保测试在主线程上运行?欢迎任何其他建议。
【问题讨论】:
-
在我的情况下,我在 lambda 中使用
TaskScheduler.FromCurrentSynchronizationContext()并且执行被推迟到另一个线程。在 lambda 之外获取上下文解决了这个问题。
标签: c# multithreading nunit task-parallel-library resharper-6.0