繁体   English   中英

在 TaskScheduler(STA 线程)上一次运行一个线程

[英]Runing one thread at a time on TaskScheduler (STA thread)

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

您必须使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM