0

我已将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提取,但是这个测试是为了检查它是否按顺序完成。

4

1 回答 1

-2

您必须使用MyStaThred.QueueTaskthen开始任务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考虑。

于 2020-01-30T16:39:20.350 回答