我正在寻找一种方法来创建一个在主线程中同步运行的TaskScheduler,以允许将WPF应用程序配置为单个线程以进行调试。
有什么想法吗?
现在我在MSDN上使用示例LimitedTaskScheduler,它允许指定并发级别(使用多少个线程),以及此扩展在应用程序启动之前设置静态TaskFactory:
void SetOnTaskFactory(TaskFactory taskFactory)
{
const BindingFlag = BindingFlags.Static | BindingFlags.NonPublic
var field = typeof(Task).GetField("s_factory", BindingFlag);
field.SetValue(null, taskFactory);
}
答案 0 :(得分:3)
出于测试目的,您可以使用ParallelExtensionsExtras库中的CurrentThreadTaskScheduler。
基本上它是一个简单的TaskScheduler
,它执行当前线程上的所有任务。
答案 1 :(得分:-1)
如果要创建SynchronousTaskScheduler,可以使用以下代码执行此操作。
void Main()
{
SynchronousTaskScheduler taskScheduler = new SynchronousTaskScheduler();
for (int i = 0; i < 100; i++)
{
Task.Factory.StartNew(() => SomeMethod(i), CancellationToken.None, TaskCreationOptions.None, taskScheduler);
}
}
void SomeMethod(int number)
{
$"Scheduled task {number}".Dump();
}
// Define other methods and classes here
class SynchronousTaskScheduler : TaskScheduler
{
public override int MaximumConcurrencyLevel
{
get { return 1; }
}
protected override void QueueTask(Task task)
{
TryExecuteTask(task);
}
protected override bool TryExecuteTaskInline(
Task task,
bool taskWasPreviouslyQueued)
{
return TryExecuteTask(task);
}
protected override IEnumerable<Task> GetScheduledTasks()
{
return Enumerable.Empty<Task>();
}
}