web-dev-qa-db-ja.com

RunSynchronouslyは、すでに開始されているタスクでは呼び出されない可能性があります

アプリケーションの単体テスト用に作成したc#クラスに問題があります。特に、問題はSystem.Threading.Tasks.Taskオブジェクトに関連しています。

そのようなオブジェクトのリストがあり、それらを同期的に実行したいと思います。

私は次のように呼びます:

myTask.RunSynchronously();

そのような場合、常に次のエラーが発生し、なぜそれを修正できるのかわかりません。

System.InvalidOperationException:RunSynchronouslyは、既に開始されているタスクでは呼び出されない可能性があります。

誰かアイデアはありますか?

28
amateur

問題は、あなたがstartedを呼び出すときのタスクであるTaskFactory.StartNew-つまり、タスクを開始するのはメソッドの名前の中にさえあります。 StartNewはタスクを作成し、代わりにStartを呼び出します。 = D

必要に応じて、@ Peter Ritchieが言ったように、タスクでWaitを実行するか、次のようにタスクを手動で作成できます。

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

既に開始されています。myTask.Wait()を使用してください

30
Peter Ritchie