Threading.Timer线程终止现象解析
我有一个WCF服务方法调用一个集合的ADD方法代码如下
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class BookService : IBookService
{
public void AddBook(Book book)
{
WcfServiceLibrary1.ServiceHelp.BookList.AddBook(book);
}
}
public class BookList
{
private static List<Book> _list = null;
public BookList()
{
_initializerList();
}
private void _initializerList()
{
if (_list == null)
{
_list = new List<Book>();
for (int i = 0; i < 10; i++)
{
_list.Add(new Book() { BookName = "C#" + i, BookNO = Guid.NewGuid(), BookPrice = 10 * i , NeedShow=true});
}
}
}
/// <summary>
/// 提供给WCF,以此获取新的实例
/// </summary>
/// <param name="item"></param>
public static void AddBook(Book book)
{
var temp = _list.Find(p => { return p.BookNO == book.BookNO; });
if (temp == null)
{
/*初始化一个新的对象*/
lock (_list)
{
_list.Add(book);
Console.WriteLine("编号{0}的书本添加成功", book.BookNO);
}
}
}
public List<Book> GetBookList()
{
return _list;
}
}
/// <summary>
/// 服务启动
/// </summary>
public void OnSatrt()
{
_msq = new BookList();
//int interval = 1000;
double interval = 5000;
Timer timer = new Timer(new TimerCallback(timer_Elapsed), null, 0, 1000);//timer_Elapsed, null, 0, 1000);
//double interval = 5000;
//Timer timer = new Timer(interval);
//timer.Elapsed += timer_Elapsed;// new ElapsedEventHandler(timer_Elapsed);
//timer.AutoReset = true;
//timer.Enabled = true;
}
//void timer_Elapsed(object sender, ElapsedEventArgs e)
//{
// throw new NotImplementedException();
//}
void timer_Elapsed(object sender)
{
var list = _msq.GetBookList().FindAll(p => { return p.NeedShow; });
Console.WriteLine("=============={0}:线程名{1}执行数据量{2}=============", DateTime.Now.ToString("HH:mm:ss"), Thread.CurrentThread.Name, list.Count);
list.ForEach(p =>
{
p.NeedShow = false;
Console.WriteLine(p.BookName);
});
}
分享到:
[解决办法]
Timer timer可能被注销,实例一个全局 Timer timer