C# 计划将来执行线程池中多个线程的有效方法?

C# 计划将来执行线程池中多个线程的有效方法?,c#,.net,multithreading,C#,.net,Multithreading,我想使用ThreadPool中的线程在不同的时间运行相同的过程。 以下是我试图实现的目标: 将项目添加到哈希中, 记下创建项目的时间,以及X0分钟内 返回并从散列中删除/处理项。 根据我所读到的,用睡眠来延迟执行是个糟糕的主意。 有什么更好的主意 不幸的是,我无法使用任务并行库,并且仅限于.NET 3.5。以下是一种使用Microsoft反应式框架NuGet Rx Main的方法: 现在,它有点做作,因为你没有给出很多具体的细节,你试图做什么。我不明白向散列中添加项意味着什么,更不用说返回并从散

我想使用ThreadPool中的线程在不同的时间运行相同的过程。 以下是我试图实现的目标:

将项目添加到哈希中, 记下创建项目的时间,以及X0分钟内 返回并从散列中删除/处理项。 根据我所读到的,用睡眠来延迟执行是个糟糕的主意。 有什么更好的主意


不幸的是,我无法使用任务并行库,并且仅限于.NET 3.5。以下是一种使用Microsoft反应式框架NuGet Rx Main的方法:


现在,它有点做作,因为你没有给出很多具体的细节,你试图做什么。我不明白向散列中添加项意味着什么,更不用说返回并从散列中删除/使用项做些什么了。一个具体的例子会非常有用。

我不知道TPL在这里会有什么用处。我想不起其中有什么涉及到为将来的执行安排事情的

NET在System.Timers和System.Threading中包含两个不同的基本计时器类,第三个类专门用于表单,以防您这样做。这些是用于此特定应用程序的go-to API

你可以考虑的一个选择是创建一个线程,它消耗了一组计划任务,基本上实现了自己的定时器。在这一个线程中,您将使用thread.Sleep。是的,通常人们会希望避免这种情况,但在专门用于此目的的专用线程中,这是很好的。我不知道您是否会发现这比使用一个计时器类更可取,因为我不太理解使用一个计时器类的阻力

请注意,System.Threading.Timer类具有一次触发模式。通过传递Timeout.Infinite作为重复间隔,计时器回调仅在初始到期时间间隔过后执行一次。唯一需要的管理是保留对计时器实例的引用,以确保在计时器周期结束之前不会对其进行垃圾收集


它甚至使用线程池线程。

微软的反应式框架团队为.NET 3.5做了一个TPL后端端口,这样你就可以使用TPL了。否则,使用反应式框架本身是一个不错的选择。你能提供更多的细节吗?也许是一个例子吧?这里是下载.NET 3.5-@VikasGupta的详细链接,我知道。他们唯一的问题是,我必须管理他们。ThreadPool的优点在于它是独立的。如果有一个TimerPool就好了。@Enigmativity很棒。不知道他们把它后传了。谢谢你。
var query =
    Observable.Create<HashAction>(o =>
    {
        var hash = "Create Hash Somehow";
        return Observable
            .Return(new HashAction()
            {
                Action = "Add",
                Hash = hash
            })
            .Concat(
                Observable
                    .Timer(TimeSpan.FromMinutes(1.0))
                    .Select(x => new HashAction()
                    {
                        Action = "Remove",
                        Hash = hash
                    }))
            .Subscribe(o);
    });

query.Subscribe(x =>
{
    if (x.Action == "Add")
    {
        /* Add Hash */
    }
    if (x.Action == "Remove")
    {
        /* Remove Hash */
    }
});