C# WebService中任务处理线程创建子线程后
2014-07-16 13:05
375 查看
protected void WriteLog(string message) { lock (lockObject) { var file = System.IO.File.AppendText("C:\\log.txt"); file.WriteLine(message); file.Close(); } } protected void asyctest(int threadid) { this.WriteLog(string.Format("主线程({0})的子线程({1})开始", threadid, AppDomain.GetCurrentThreadId())); System.Threading.Thread.Sleep(10000); ProcessThread thread = this.GetThreadbyID(threadid); this.WriteLog(string.Format("主线程({0}: state: {1})的子线程({2})结束", threadid, thread == null ? -1 : (int)thread.ThreadState, AppDomain.GetCurrentThreadId())); } protected ProcessThread GetThreadbyID(int id) { foreach (ProcessThread item in System.Diagnostics.Process.GetCurrentProcess().Threads) { if (item.Id == id) { return item; } } return null; } protected delegate void delegatetest(int threadid); [WebMethod] public void test() { this.WriteLog(string.Format("主线程({0})开始", AppDomain.GetCurrentThreadId())); for (int i = 0; i < 10; i++) { delegatetest currentDaliyCollect = new delegatetest(asyctest); IAsyncResult iADaliyCollect = currentDaliyCollect.BeginInvoke(AppDomain.GetCurrentThreadId(), null, null); if (iADaliyCollect.IsCompleted) { currentDaliyCollect.EndInvoke(iADaliyCollect); } } }
结论:
C# WebService中任务处理线程创建子线程后,此任务处理线程并没有退出销毁,而是ThreadState切换成Wait状态,所以子线程也不会被中止,而得以继续执行。
本来是想验证,父线程退出后,子线程是否会被强制中止。时间关系没有验证,至少验证了在webservice,不用担心在rpc方法中创建的子线程会被中止。
相关文章推荐
- VS2005 C#创建WebService使用线程
- 一个主线程下有多个子线程任务,主线程必须在100秒内将子线程执行的集合结果进行处理返回
- 《CLR via C#》之线程处理——任务调度器
- C#使用后台线程BackgroundWorker处理任务的总结
- 利用主线程与子线程间的消息通讯,实现任务处理队列.子线程中创建不会阻塞执行的窗口
- VS2005 C#创建WebService使用线程(续)
- 处理任务队列的工作线程的创建
- C#中创建线程的方式,以及主线程和子线程之间的资源调用
- 《CLR via C#》之线程处理——线程池与任务
- 怎样通过Visual C#.net创建一个DTS任务
- VS2003 C#:重写键盘响应事件、动态创建控件、创建线程、在线程中使用委托在界面显示数据
- 使用C#创建webservice及调用方式
- 在你的服务器端代码中使用线程和创建异步处理
- C# 线程处理教程
- 使用C#创建webservice及三种调用方式
- 在C# WinForm程序中创建控件数组及相应的事件处理
- C#中动态创建控件及事件处理程序
- 使用C#创建webservice及三种调用方式
- 【转】C# 创建 终止线程
- 使用C#创建webservice及三种调用方式