2014-02-13 58 views
0

用户必须重复查询大型数据库以获取信息。这是异步完成的。一次只能运行一个查询。.Net,长时间的异步操作

我没有创建为每个查询的代码是不干净,少maintable一个新的线程,等

我没有使用ThreadPool.QueueUserWorkItem,因为这将占用一个线程池线程多秒,我'宁可不通过ThreadPool.SetMinThreads增加最小ThreadPool线程,因为这不会被每个用户使用。

我通过创建我自己的单线程“ThreadPool”来解决这个问题,它只处理项目。没有创建新线程,没有ThreadPool线程占用。

我应该避免使用ThreadPool吗?我应该采取不同的方法吗?

编辑: 我仅限于.NET 3.5和Visual Studio 2010的

+1

这正是'async' /'await'的用途。你有没有探究过? –

+0

是的。我仅限于.net 3.5和visual studio 2010.“Async/await”是否可用于3.5?我试着在几个星期前下载一个软件包以使async/awat可用,但没有成功。 –

+0

你可以显示你现在的代码吗?它会使您更容易为您创建示例。 –

回答

1

我没有使用ThreadPool.QueueUserWorkItem,因为这将占用一个线程池线程多秒,

ThreadPool已经很忙时只有一个(小)问题。但即使这样,“蹲”单线程也不是一个真正的问题。

所以不,不要创建自己的ThreadPool。这增加了很多没有解决的复杂性。

+0

我不同意。我的代码是大型项目的一小部分。当另一个开发人员有相同的想法时,会发生什么情况,线程池中只有2个线程可用?非常糟糕,所有使用线程池的东西都必须等待。我不认为C#的Threadpool适用于这样的任务。 –

+0

Iirc默认MaxThreads在Fx 3中为50,在Fx4 +中它> 1000.您正在想象问题。 –

+0

哦!我从来没有想过要查找默认值。只是假设默认的最大值会很低。谢谢,这解决了我的问题。猜猜我应该使用线程池。 –