【发布时间】:2019-11-23 21:00:45
【问题描述】:
我有以下代码:
static async Task Main()
{
ConcurrentExclusiveSchedulerPair concurrentExclusiveSchedulerPair = new ConcurrentExclusiveSchedulerPair(TaskScheduler.Default, 4);
var factory = new TaskFactory(concurrentExclusiveSchedulerPair.ConcurrentScheduler);
for (int i = 0; i < 10; i++)
{
factory.StartNew(ThreadTask);
}
concurrentExclusiveSchedulerPair.Complete();
await concurrentExclusiveSchedulerPair.Completion;
Console.WriteLine("Completed");
}
private static async Task ThreadTask()
{
var random = new Random();
await Task.Delay(random.Next(100, 200));
Console.WriteLine($"Finished {Thread.CurrentThread.ManagedThreadId}");
}
并且程序在任务完成之前完成执行。我理解为什么它会在ThreadTask 返回完成的任务时发生,并且从ConcurrentExclusiveSchedulerPair 的角度来看它确实完成了执行。我也知道一些解决方法,但是有没有正确的方法来异步运行这个模式?
【问题讨论】:
标签: c# multithreading task task-parallel-library