小编jas*_*den的帖子

C#线程池限制线程

好吧......我给了网站一个公平的搜索,并阅读了很多关于这个主题的帖子.我发现了这个问题:C#中一个简单线程池的代码特别有用.

但是,总是看起来,我需要的东西略有不同.

我查看了MSDN示例,并根据我的需要进行了调整.我引用的示例如下:http://msdn.microsoft.com/en-us/library/3dasc8as(VS.80,printer).aspx

我的问题是这个.我有一组相当简单的代码,它通过HttpWebRequestWebResponse类加载一个网页,并通过一个来读取结果Stream.我在一个线程中触发此方法,因为它需要执行多次.该方法本身很短,但需要触发的次数(每次都有不同的数据)会有所不同.它可以是1到200之间的任何地方.

我读过的所有内容似乎都表明ThreadPool班级是主要候选人.这就是事情变得棘手的事情.我可能需要发出100次这样的事情,但我最多只能运行3个线程(对于这个特定的任务).

我已经尝试设置MaxThreadsThreadPool通过:

ThreadPool.SetMaxThreads(3, 3);
Run Code Online (Sandbox Code Playgroud)

我并不完全相信这种方法有效.此外,我不想破坏将在其上运行的系统上运行的其他网站或程序.因此,通过限制线程的#ThreadPool,我可以确定这仅适用于我的代码和我的线程吗?

MSDN示例使用事件驱动方法和调用WaitHandle.WaitAll(doneEvents);,这就是我这样做的方式.

所以我的问题的核心是,如何确保或指定可以为其代码运行的最大线程数,但让代码继续运行更多线程,因为之前的线程完成直到任意点?我是以正确的方式解决这个问题吗?

此致

贾森


好的,我添加了一个信号量方法并完全删除了ThreadPool代码.看起来很简单.我从http://www.albahari.com/threading/part2.aspx获取了我的信息

这个例子向我展示了如何:

[此处的文字是网站的复制/粘贴]

Semaphore容量为1的A 类似于a Mutexlock,除了Semaphore没有"所有者" - 它与线程无关.任何线程都可以调用Releasea Semaphore,而使用Mutexlock,只有获得资源的线程才能释放它.

在下面的示例中,十个线程执行一个循环,Sleep中间有一个语句.A Semaphore确保一次不超过三个线程可以执行该Sleep语句:

class SemaphoreTest
{
    static Semaphore s = new Semaphore(3, 3);  // Available=3; Capacity=3 …
Run Code Online (Sandbox Code Playgroud)

c# multithreading threadpool c#-2.0

36
推荐指数
1
解决办法
5万
查看次数

在计算机上运行.net的许多版本

我对各种版本的.net感到好奇.我们有一个环境,我们开发了各种版本的应用程序(1.1和2.0).现在,我正试图在3.5中开发"继续".最大的问题是这些版本是否能够在同一个IIS安装上很好地协同工作.另一个需要注意的是,我正在使用Visual Studio 2005和IIS 5.0在Windows XP上进行开发.应用程序将在Windows Server 2003上运行并使用IIS 6.0.从我所看到的,看起来每个IIS虚拟目录都可以设置自己特定的.net版本.这不足以使使用各种.Net版本的各种应用程序不会相互影响吗?

我会得到任何我能得到的答案,但是如果你可以直接从微软那些文档中引用你的答案,这将是非常有用的(我的公司非常注意'直接从小时口听到'可以这么说).那就是说,我真的会在这里得到任何答案.沟渠的故事也很受欢迎.

谢谢!

.net asp.net iis

3
推荐指数
1
解决办法
312
查看次数

标签 统计

.net ×1

asp.net ×1

c# ×1

c#-2.0 ×1

iis ×1

multithreading ×1

threadpool ×1