具有异步顺序任务的TaskScheduler C#

我正在执行一些.py脚本异步。 一个脚本需要大约30秒才能执行。 可能会发生在两到三秒的时间内选择两个甚至更多的脚本。 目标是拥有一个Scheduler,它收集所有任务并一个接一个地执行它们。 应包括FIFOfunction。 我尝试过以下代码只是为了尝试queuedTaskScheduler的function,但即使这样也行不通。

QueuedTaskScheduler queueScheduler; private TaskScheduler ts_priority1; int pos = 0; public Form1() { InitializeComponent(); queueScheduler = new QueuedTaskScheduler(targetScheduler: TaskScheduler.Default, maxConcurrencyLevel: 1); ts_priority1 = queueScheduler.ActivateNewQueue(1); } private void button3_Click(object sender, EventArgs e) { QueueValue(pos, ts_priority1); pos++; } private void button4_Click(object sender, EventArgs e) { changeString(pos); pos++; } private void changeString (int position) { var bea = "This is Thread " + position + " starting"; MethodInvoker Labelupdate = delegate { label2.Text = bea; }; Invoke(Labelupdate); Thread.Sleep(3000); bea = "Thread " + position + " is ending"; MethodInvoker Labelupdate1 = delegate { label2.Text = bea; }; Invoke(Labelupdate1); Thread.Sleep(1000); } private void updateLabel (string Lab) { MethodInvoker Labelupdate = delegate { label2.Text = Lab; }; Invoke(Labelupdate); } private Task QueueTask(Func f, TaskScheduler ts) { return Task.Factory.StartNew(f, CancellationToken.None, TaskCreationOptions.HideScheduler | TaskCreationOptions.DenyChildAttach, ts); } private Task QueueValue(int position, TaskScheduler ts) { return QueueTask(async () => { label2.Text = "This is Thread " + position + " starting"; Thread.Sleep(3000); label2.Text = "Thread " + position + " is ending"; Thread.Sleep(1000); }, ts); } 

我解决了 只需要一个信号量。 它与此线程中的方式相同以下是代码:

 private static SemaphoreSlim semaphore = new SemaphoreSlim(1); private Task QueueValue(int position, TaskScheduler ts) { return QueueTask(async () => { await semaphore.WaitAsync(); try { var at = "This is Thread " + position + " starting"; updateLabel(at); await Task.Delay(3000); at = "Thread " + position + " is ending"; updateLabel(at); await Task.Delay(1000); } finally { semaphore.Release(); } }, ts); } 

非常感谢!