36

我为对应用程序进行单元测试而创建的 ac# 类存在问题,特别是问题与 System.Threading.Tasks.Task 对象有关。

我有一个此类对象的列表,我想在它们上同步执行每个对象。

我称之为:

myTask.RunSynchronously();

当我这样做时,我总是收到以下错误,我不知道为什么我可以解决它。

System.InvalidOperationException:可能不会在已启动的任务上调用 RunSynchronously。

有人有什么想法吗?

4

3 回答 3

46

问题是您在调用时启动TaskFactory.StartNew了任务- 我的意思是,它甚至是以您正在启动任务的方法的名称。StartNew创建任务,然后Start代表您调用。=D

如果需要,您可以Wait像@Peter Ritchie 所说的那样执行任务,也可以像这样手动创建任务:

var task = new Task(() => { ... });
task.RunSynchronously();
于 2012-05-11T17:12:38.850 回答
39

它已经开始了,只需使用myTask.Wait()

于 2012-05-11T17:04:19.960 回答
1

您尝试再次运行任务,或者它处于执行或取消状态。检查以下文档的一部分:

Task.RunSynchronously 方法

在当前 TaskScheduler 上同步运行 Task。

InvalidOperationException 任务未处于要启动的有效状态。它可能已经启动、> 执行或取消,或者它可能是以不支持直接调度的方式创建的。

来源:Docs .NET Task.RunSynchronously 方法

于 2022-02-24T12:02:54.260 回答