在任务计划程序(STA 线程)上一次运行一个线程



>我已将 StaTaskScheduler 线程设置为 1,我希望每 5 秒获得一个调试输出,但我最终得到 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 的图标提取,但此测试是检查它是否按顺序完成。

您必须使用MyStaThred.QueueTask而不是Task.Factory.Startnew启动任务:

private void Test() {
for (int i = 0; i < 10; i++)
MyStaThread.QueueTask(new Task(() =>
{
Task.Delay(5000); //temp for long operation
Debug.WriteLine(DateTime.Now);
}));
}
public static StaTaskScheduler MyStaThread = 
new StaTaskScheduler(numberOfThreads: 1);

Task.Factory.Startnew使用 .Net Framework 内部线程池,不考虑StaTaskScheduler

相关内容

  • 没有找到相关文章

最新更新