C# 不能对已启动的任务调用RunSynchronously

C# 不能对已启动的任务调用RunSynchronously,c#,async-await,task-parallel-library,C#,Async Await,Task Parallel Library,我在为单元测试我的应用程序而创建的c#类上遇到了问题,特别是在System.Threading.Tasks.Task对象上 我有一个这样的对象列表,我想在它们上面同步执行每个对象 我称之为: myTask.RunSynchronously(); 当我这样做,我总是得到以下错误,我不知道为什么我可以修复它 System.InvalidOperationException:无法对已启动的任务调用RunSynchronously 有人有什么想法吗?它已经开始了,只需使用myTask.Wait()问题

我在为单元测试我的应用程序而创建的c#类上遇到了问题,特别是在System.Threading.Tasks.Task对象上

我有一个这样的对象列表,我想在它们上面同步执行每个对象

我称之为:

myTask.RunSynchronously();
当我这样做,我总是得到以下错误,我不知道为什么我可以修复它

System.InvalidOperationException:无法对已启动的任务调用RunSynchronously


有人有什么想法吗?

它已经开始了,只需使用
myTask.Wait()
问题是您在调用
TaskFactory.StartNew
时启动了任务-我的意思是,您甚至以方法的名义启动了任务
StartNew
创建任务,然后代表您调用
Start
=D

如果您愿意,您可以像@Peter Ritchie所说的那样等待任务,也可以像这样手动创建任务:

var task = new Task(() => { ... });
task.RunSynchronously();

您是否使用
TaskFactory.StartNew()
创建了任务?@user2163234是的,这就是
RunSynchronously
中“同步”的意思。如果任务已经启动,RunSynchronously可以引发异常,因为启动和运行同步之间存在竞争条件(即任务可以先完成,然后异常)
Wait
只返回任务是否已完成。这导致我的代码死锁,而Tejs代码没有死锁。如果有多个位置异步检查任务是否运行,
RunSynchronously
具有竞争条件,有时会抛出异常。