簡體   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