今天不小心发现一个问题一直不解。
当我在一个方法中使用ThreadPool.QueueUserWorkItem插入任务时,如果方法执行过快会导致我插入的任务实际上没有执行。而若我插入任务后让线程等待一下,那么插入的任务就可以正常执行。。见代码
static void Main(string[] args)
{
Example_RegisterWaitForSingleObject();
Console.ReadKey();
}
private static void Example_RegisterWaitForSingleObject()
{
ThreadPool.QueueUserWorkItem(o => { while (true) { Thread.Sleep(500); Console.WriteLine("123"); } });
Thread.Sleep(1000);
}
所以推断,将任务插入到线程池中是需要时间的,而若在这段时间中释放掉某些资源就会导致任务没有实际插入到队列中。
我的疑惑是:
1、到底我的推断整不正确。有没有更官方的解释,或则研究过win32的帮解释下
2、若实际代码中遇到这种情况大家都有什么好解决的办法(应该不会去Thread.Sleep()一下哇,最好有无阻塞式的方式)
8 回答
隔江千里
TA贡献1906条经验 获得超10个赞
我按你的代码做了一下测试
private static void Example_RegisterWaitForSingleObject() { ThreadPool.QueueUserWorkItem(o => { while (true) { //Thread.Sleep(500); Console.WriteLine("123"); } }); //Thread.Sleep(1000); }
正常输出,没有任何问题
- 8 回答
- 0 关注
- 910 浏览
添加回答
举报
0/150
提交
取消