C# WebService中任务处理线程创建子线程后
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方法中创建的子线程会被中止。
C# WebService中任务处理线程创建子线程后的更多相关文章
- Handler系列之创建子线程Handler
上一篇我介绍了Handler机制的工作原理,默认情况下,ActivityThread类为我们创建的了主线程的Looper和消息队列,所以当你创建Handler之后发送消息的时候,消息的轮训和handl ...
- C#创建子线程,子线程使用委托更新控件
一.背景 由于在窗体程序中通过点击一个button按键后需要更新TreeView控件的内容,由于等待时间比较长,主程序无法一起在那边等待,需要去处理其它的事情,所以就需要创建新的子线程来处理.因为主线 ...
- vc中主线程等待子线程退出的方法
VC线程同步,在子线程中等待另一子线程结束,通过WaitForSingleObject可以实现,但是如果在主线程中等待子线程结束,这个函数是无法完成要求的,因为它会造成主线程挂起,导致程序死掉.我们可 ...
- 通过类创建子线程&同步锁
一.通过类创建子线程 import threading class MyThread(threading.Thread): def __init__(self,num): threading.Thre ...
- Android 使用handler实现线程间发送消息 (主线程 与 子线程之间)、(子线程 与 子线程之间)
keyword:Android 使用handler实现线程间发送消息 (主线程 与 子线程之间).(子线程 与 子线程之间) 相信大家平时都有使用到异步线程往主线程(UI线程)发送消息的情况. 本文主 ...
- IOS 线程处理 子线程
IOS 线程处理 子线程的启动与结束 技术交流新QQ群:414971585 IOS中,如果要在主线程中启动一个子线程,可以又两种方法: [NSThread detachNewThreadSelec ...
- Java多线程01(Thread类、线程创建、线程池)
Java多线程(Thread类.线程创建.线程池) 第一章 多线程 1.1 多线程介绍 1.1.1 基本概念 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于 ...
- c# Winfrom窗体事件中启用多线程 并用子线程修改窗体里面的属性
昨天一个朋友问我一个问题,需求是 this.textBox1.Text = "睡眠前"; Thread.Sleep(1000); this.textBox1.Text = &quo ...
- 【转载】在C#中主线程和子线程如何实现互相传递数据
引用:https://blog.csdn.net/shuaihj/article/details/41316731 一.不带参数创建Thread using System; using System. ...
随机推荐
- node操作mongoDB数据库的最基本例子
连接数据库 var mongo=require("mongodb"); var host="localhost"; var port=mongo.Connect ...
- sed、grep、awk -- 三剑客笔记记录
sed常用操作笔记 1.删除文件最后一行: sed -i '$d' filename 2.递归替换内容:sed -i 's/内容A/内容B/g' filename sed -i "s/S ...
- 转载 cglib代理和java代理
Java动态代理之JDK实现和CGlib实现(简单易懂) 转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6542259.html 一:代理模式(静态代理) ...
- openStack nova nova valid hosts 优化
scheduler_default_filters=AllHostsFilterallow_resize_to_same_host=Trueallow_migrate_to_same_host=Tru ...
- 关于1.0.0版Backbone.js调用validate
网上的调用这个方法的例子都是老版本的,新版本的调用方法有所变化,首先错误绑定事件error换成了invalid,其次设置数据时应传入{validate: true} var Chapter = Bac ...
- http协议及web框架
http协议简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本 ...
- pandas入门学习--------------------------(一)
使用pandas,首先需要熟悉它的2个主要的数据结构:Series和DataFrame. Series series是一种类似于一维数组的的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关 ...
- AndroidManifest.xml中声明权限——各种permission含义摘录
android.permission.EXPAND_STATUS_BAR 允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序 android. ...
- 利用同步辅助类CountDownLatch计算多线程的运行时间
一.CountDownLatch jdk提供的一个同步辅助类,在完成一组在在其他线程中执行的操作前,允许一个或者多个其他的线程等待,通过调用 await() 方法阻塞,直到由于 countDown() ...
- hibernate事务配置Aop aop:advisor模式
<!-- 使用HibernateTransactionManager管理hibernate事务 --> <bean id="txManager" class=&q ...