C# 唤醒像线程一样无限休眠的任务。中断
我有几个始终运行的线程正在执行“任务”,还有一个线程获得新的“任务”,并在这些线程之间分配 执行任务的线程:C# 唤醒像线程一样无限休眠的任务。中断,c#,.net,multithreading,task-parallel-library,C#,.net,Multithreading,Task Parallel Library,我有几个始终运行的线程正在执行“任务”,还有一个线程获得新的“任务”,并在这些线程之间分配 执行任务的线程: public class TaskExecutor { public object CurrentTask { get; set; } public Thread ThreadRef { get; set; } private void Run() { while (true) { try
public class TaskExecutor
{
public object CurrentTask { get; set; }
public Thread ThreadRef { get; set; }
private void Run()
{
while (true)
{
try
{
if (CurrentTask != null)
ExecuteTask(CurrentTask);
else
Thread.Sleep(Timeout.Infinite);
}
catch (ThreadInterruptedException)
{
}
catch (Exception)
{
CurrentTask = null;
}
}
}
private void ExecuteTask(object task)
{
}
}
分配任务的线程:
private void TryDistribute(TaskExecutor thread, object task)
{
if (thread.CurrentTask == null)
{
thread.CurrentTask = task;
thread.ThreadRef.Interrupt();
}
}
如何使用TPL任务实现相同的逻辑(无限期等待和唤醒以供其他线程处理?请参阅-问题不同,但公认的答案是适用的。我不明白为什么要在
TryDistribute
中调用中断
(或者根本不)。您不能用等待句柄包装器(如ManualResetEvent
)来表达您想要的行为吗?。你所做的使我想起了我的老朋友。如果您需要旧.NET中的任务,可以使用my libraries()。在没有TPL的情况下实现该行为是一种非常有问题的方法。无论是否使用TPL,都应该使用正确的同步机制。@Servy,这就是我想要的-将此逻辑移到TPL。但正如其他评论者所指出的,最好使用ManualResetEvent而不是无限睡眠我有几个始终运行的线程正在执行“任务”,还有一个线程获得新的“任务”,并在这些线程之间分配。
。。。喜欢线程池?为什么不直接使用线程池呢?