[英]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.