C#关于结束进程的问题

tei333 2017-11-02 06:10:39
我创建一个线程,线程主要是获取一个从服务器获取的数据,但是服务器处理的时间很长,线程会一直卡在从服务器获取数据的地方,我现在想关掉这个线程,我知道可以用Abort这个方法强行结束进程,但是我看很多说法是这种方式不安全,我想请教一下这种情况还有其他的方法可以解决吗?
...全文
396 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
闭包客 2017-11-03
  • 打赏
  • 举报
回复
引用 6 楼 tei333 的回复:
[quote=引用 3 楼 closurer 的回复:] Abort 本身并没有问题,只要你的线程设计成被结束也不会造成逻辑错误的。 asp.net 的请求处理线程就是使用 Abort 结束的。
这个应该不会造成逻辑错误,我只是需要从服务端获取数据,有数据返回就显示,我用abort结束进程,再把这个结束方法放在try里,是不是就不会引发其他什么问题了?这样就安全了吗?[/quote] abort 本身是没有问题的,你要想的是 abort 的时候,数据下载到一半怎么办,保存到一半怎么办,显示到一半怎么办……
  • 打赏
  • 举报
回复
引用 9 楼 tei333 的回复:
[quote=引用 8 楼 duanzi_peng 的回复:] 用Task任务,它是由线程池线程执行,线程池线程由线程池创建,管理,销毁,不需要手动释放。
task任务的取消是用cancellationtokensource的cancel方法取消,它也是在任务里通过循环检查cancellationtoken.iscancellationrequested的方式来确认是否结束的。原理上和循环检查一个标志位是一样的,现在进程阻塞的原因是因为堵在服务端获取数据这一条指令上,在没有获取到数据之前不会去检查标志位的。我也不清楚task是否还有其他结束进程的方式~[/quote] 从服务端获取数据的线程阻塞了吧,阻塞导致程序不继续运行直到有数据返回,这个需要用异步来处理了,异步处理不需要等待,直到它的回调函数执行,来处理从服务端返回的数据。
tei333 2017-11-03
  • 打赏
  • 举报
回复
引用 8 楼 duanzi_peng 的回复:
用Task任务,它是由线程池线程执行,线程池线程由线程池创建,管理,销毁,不需要手动释放。
task任务的取消是用cancellationtokensource的cancel方法取消,它也是在任务里通过循环检查cancellationtoken.iscancellationrequested的方式来确认是否结束的。原理上和循环检查一个标志位是一样的,现在进程阻塞的原因是因为堵在服务端获取数据这一条指令上,在没有获取到数据之前不会去检查标志位的。我也不清楚task是否还有其他结束进程的方式~
  • 打赏
  • 举报
回复
用Task任务,它是由线程池线程执行,线程池线程由线程池创建,管理,销毁,不需要手动释放。
白衣如花 2017-11-03
  • 打赏
  • 举报
回复
引用 5 楼 tei333 的回复:
[quote=引用 4 楼 u012948520 的回复:] 后台线程 或者设置一个flag,关闭程序设置flag为false,线程检测到flag为false,不再执行
关键就是一直卡在从服务端获取数据那里,根本不会去循环检查标志位[/quote]一般有个timeout的设置吧?超过一段时间不返回就认为异常了。 如果是双向通讯,就不用阻塞式申请数据。每次调用都带一个ID,服务端处理完主动推送把ID和结果传回来就好了。
tei333 2017-11-03
  • 打赏
  • 举报
回复
引用 3 楼 closurer 的回复:
Abort 本身并没有问题,只要你的线程设计成被结束也不会造成逻辑错误的。 asp.net 的请求处理线程就是使用 Abort 结束的。
这个应该不会造成逻辑错误,我只是需要从服务端获取数据,有数据返回就显示,我用abort结束进程,再把这个结束方法放在try里,是不是就不会引发其他什么问题了?这样就安全了吗?
tei333 2017-11-03
  • 打赏
  • 举报
回复
引用 4 楼 u012948520 的回复:
后台线程 或者设置一个flag,关闭程序设置flag为false,线程检测到flag为false,不再执行
关键就是一直卡在从服务端获取数据那里,根本不会去循环检查标志位
白衣如花 2017-11-03
  • 打赏
  • 举报
回复
后台线程 或者设置一个flag,关闭程序设置flag为false,线程检测到flag为false,不再执行
闭包客 2017-11-03
  • 打赏
  • 举报
回复
Abort 本身并没有问题,只要你的线程设计成被结束也不会造成逻辑错误的。 asp.net 的请求处理线程就是使用 Abort 结束的。
tei333 2017-11-03
  • 打赏
  • 举报
回复
引用 1 楼 weixin_40791311 的回复:
阻塞的方式获取服务器端的数据吗?
单独开的一个线程获取数据,但是在这个线程里,它也会阻塞在获取服务端数据的指令上,这种方式的我不知道怎么结束进程好
weixin_40791311 2017-11-02
  • 打赏
  • 举报
回复
阻塞的方式获取服务器端的数据吗?
【采用BPSK或GMSK的Turbo码】MSK、GMSK调制二比特差分解调、turbo+BPSK、turbo+GMSK研究(Matlab代码实现)【采用BPSK或GMSK的Turbo码】MSK、GMS内容概要:本文主要介绍了采用BPSK或GMSK调制方式的Turbo码相关技术研究,重点涵盖GMSK调制下的二比特差分解调方法、Turbo码与BPSK/GMSK调制相结合的系统性能分析,并提供了完整的Matlab代码实现方案。研究内容包括调制解调原理、编码结构设计、误码率仿真及系统优化等关键环节,旨在通过仿真手段验证所提出方案的有效性和可靠性,帮助研究人员深入理解现代数字通信系统中的关键技术和其实现方法。; 适合人群:具备一定通信原理和Matlab编程基础,从事无线通信、信号处理、编码理论等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握GMSK调制与Turbo码结合的系统设计与仿真方法;②学习二比特差分解调算法在实际通信系统中的应用;③通过Matlab代码实现提升对数字调制解调和信道编码技术的理解与实践能力;④为相关课题研究、毕业设计或工程项目提供参考和技术支持。; 阅读建议:建议读者结合文中提供的Matlab代码逐模块运行与调试,对照通信系统基本原理深入理解各环节功能,重点关注调制解调过程与Turbo译码的协同工作机制,并尝试修改参数以观察系统性能变化,从而达到理论与实践相结合的学习效果。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧