凑巧而已,你测试时你的Timer正好没有被垃圾回收试试改成这样,说不定Timer就不会继续跑了: var ThrdA = new Thread(FunA); ThrdA.Start(); for (int i = 0; i < 10; i++) { var s = new int[100000000]; } Console.ReadLine();
public static void Add(object obj) { var num = new Random().Next(0, 1000); try { rwl.AcquireWriterLock(TimeSpan.FromSeconds(30)); try { numList.Add(num); Console.WriteLine("我是线程{0},我插入的数据是{1}。", Thread.CurrentThread.ManagedThreadId, num); } finally { rwl.ReleaseWriterLock(); } } catch (ApplicationException) { rwl.ReleaseWriterLock(); } }我修改了部分代码(同样修改了Read部分),如果死锁,请求便超时,同时抛出ApplicationException异常,实际上并没有抛出异常。所以,我想应该不是死锁的问题。
var ThrdA = new Thread(FunA);
ThrdA.Start();
for (int i = 0; i < 10; i++)
{
var s = new int[100000000];
}
Console.ReadLine();
public static void Add(object obj)
{
var num = new Random().Next(0, 1000);
try
{
rwl.AcquireWriterLock(TimeSpan.FromSeconds(30));
try
{
numList.Add(num); Console.WriteLine("我是线程{0},我插入的数据是{1}。", Thread.CurrentThread.ManagedThreadId, num);
}
finally
{
rwl.ReleaseWriterLock();
}
}
catch (ApplicationException)
{
rwl.ReleaseWriterLock();
}
}我修改了部分代码(同样修改了Read部分),如果死锁,请求便超时,同时抛出ApplicationException异常,实际上并没有抛出异常。所以,我想应该不是死锁的问题。
而且,回调方法不在创建计时器的线程上执行,而是在系统提供的ThreadPool线程上执行。呵呵