Tag:

在IIS应用程序上使用tasks / ThreadPool(asp .net)

我们在iis 7上有一个asp.net应用程序。我们需要创建一个异步进程来进行计算(使用Web服务)而不是让客户端等待,我们使用ThreadPool来做到这一点(我更喜欢Tasks但我是服务器旁边的家伙)。 我的问题是: 1.如果在iis上使用线程池,是从客户端还是从OS获取iis池中的线程? 2.你会使用什么任务或ThreadPool(任务给你更多我知道,但UI人员喜欢池)。 坦克

在所有后台线程池线程完成时得到通知

我有一个场景,当我用ThreadPool启动3..10个线程。 每个线程都完成它的工作并返回ThreadPool。 所有后台线程完成后,主线程中可以通知哪些选项? 目前我正在使用一种自行开发的方法,为每个创建的线程递增一个变量,并在后台线程即将完成时递减它。 这很好用,但如果有更好的选择,我很好奇。

如何在.NET 3.5中重用线程

我有一个处理大块信息的子程序。 为了利用整个CPU,它将工作分为单独的线程。 完成所有线程后,它就完成了。 我读到创建和销毁线程会占用大量开销,所以我尝试使用线程池,但实际上运行速度比创建自己的线程慢。 如何在程序运行时创建自己的线程,然后继续重用它们? 我见过有些人说它无法完成,但是线程池是这样做的,所以它必须是可能的,对吧? 以下是启动新线程/使用线程池的代码的一部分: //initialization for threads Thread[] AltThread = null; if (NumThreads > 1) AltThread = new Thread[pub.NumThreads – 1]; do { if (NumThreads > 1) { //split the matrix up into NumThreads number of even-sized blocks and execute on separate threads int ThreadWidth = DataWidth / NumThreads; if (UseThreadPool) //use […]

c#Threadpool – 限制线程数

我正在开发一个控制台应用程序 我想使用Threadpool来执行Web下载。 这是一些假代码。 for (int loop=0; loop< 100; loop++) { ThreadPool.QueueUserWorkItem(new WaitCallback(GetPage), pageList[loop]); } snip private static void GetPage(object o) { //get the page } 如何阻止我的代码启动两个以上(或十个或其他)同步线程? 我试过了 ThreadPool.SetMaxThreads(1, 0); ThreadPool.SetMinThreads(1, 0); 但他们似乎没有任何影响。

等待QueueUserWorkItem完成

如果我使用QueueUserWorkItem向线程池添加作业…如何在完成所有作业之前使程序继续运行? 我知道我可以添加一些逻辑来保持应用程序不运行直到所有作业都完成,但我想知道是否有类似Thread.Join()或者是否有任何方法来检索正在分配作业的每个线程。

为什么Thread.Sleep会影响新任务的创建?

private static void Main(string[] args) { for (int i = 0; i { Thread.Sleep(1000); Console.WriteLine(“hej”); Thread.Sleep(10000); }); } Console.ReadLine(); } 为什么这段代码在一秒钟后不能打印1000次“hej”? 为什么Thread.Sleep(10000)会对代码行为产生影响?

在使用ThreadPool时,有人可以解释这种奇怪的行为吗?

代码 using System; using System.Threading; public delegate void LoadingProgressCallback(double PercentComplete,string ItemName); public delegate void LoadCompleteCallback(int ItemID, string ItemName); public static class Program { public static void Main(string[] args) { LoadTest loadTest = new LoadTest(); loadTest.LoadItems(args); } } public class LoadTest { ManualResetEvent resetEvent; int numThreads = 0; public LoadTest() {} public void LoadItems(string[] Items) { […]