【发布时间】:2020-01-30 16:30:36
【问题描述】:
我已将 StaTaskScheduler 线程设置为 1,我希望每 5 秒得到一个 Debug 输出,但我最终得到 10 个具有相同日期的输出
private void Test() {
for (int i = 0; i < 10; i++)
Task.Factory.StartNew(() =>
{
Task.Delay(5000); //temp for long operation
Debug.WriteLine(DateTime.Now);
}, CancellationToken.None, TaskCreationOptions.None, MainWindow.MyStaThread);
}
public static StaTaskScheduler MyStaThread =
new StaTaskScheduler(numberOfThreads: 1);
我错过了什么? STA的原因是后面会用于需要STA的Icons提取,但是这个测试是为了检查它是否按顺序完成。
【问题讨论】:
-
你的预期输出是什么?打印 DateTime.Now 每 5 秒。没有得到你
-
您认为
Task.Delay模拟长时间运行的操作是不正确的。Task.Delay是基于计时器的,不会阻塞调用它的线程,因此您的任务会一一完成,但几乎是立即完成。所以毫不奇怪,您会为它们观察到相同的时间戳。 -
@DmytroMukalov 谢谢,它应该是
Thread.Sleep(2500);,然后就可以了
标签: c# multithreading task task-parallel-library taskfactory