怎样用暴力终止Asynchronous的调用?

cacaca6 2010-08-26 10:47:44
废话不多说,程序如下:

Action a = ()=>
{
while(true) {}
};

a.BeginInvoke(s=>
{
Action x = (Action)s.AsyncState;
x.EndInvoke(s);
},a);

Console.ReadLine();

大家可以看到,只要主程序不结束,我的那个异步调用程序将会永远执行下去 while(true) {},如何强行终止异步调用线程?

还望高手相助

多谢
...全文
72 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bloodish 2010-08-26
  • 打赏
  • 举报
回复
异步改线程

想停掉时调用Abort()

最好再设置线程的IsBackgroud属性为True,保证主线程退出时该子线程也可以退出.
cacaca6 2010-08-26
  • 打赏
  • 举报
回复
提供f()方法的程序员应该给你提供其他的API让你去做控制.

应该是应该,可是现实是我没法控制,所以才要强行杀掉这个线程,可怎么做啊?头痛

bloodish 2010-08-26
  • 打赏
  • 举报
回复
让人费解,如果:

a.BeginInvoke(s=>
{
Action x = (Action)s.AsyncState;
x.EndInvoke(s);
},a);

是你主动在调用这个异步的Invoke,那么有什么不要控制的?是否调用完全你自己决定,
除非f()调用之后是不返回的,那样的情况就不好处理了,提供f()方法的程序员应该给你
提供其他的API让你去做控制.
cacaca6 2010-08-26
  • 打赏
  • 举报
回复
我现在遇到的问题是,很现实的,比如说f()函数持续往数据库里面写入垃圾数据,host 异步调用函数的主程序又不能随便结束,这就造成我无法控制f()函数,使得数据库里面到处是垃圾数据。我只能用一些非常规的方法来强行终止f()函数的胡作非为,可怎么做?还请高人出招
cacaca6 2010-08-26
  • 打赏
  • 举报
回复
楼上各位老大,你们没明白我的意思,这样,我把程序重写一下:

Action a = ()=>
{
f();
}

a.BeginInvoke(s=>
{
Action x = (Action)s.AsyncState;
x.EndInvoke(s);
},a);

Console.ReadLine();

---------
f()函数是我无法控制的,是别人写的,他也许是WCF的一个CALL,也许是另外一个AppDOM里的一个函数,总之我无法改写f(),我的问题就是我怎样强行终止运行f()函数的后台线程?

多谢
bloodish 2010-08-26
  • 打赏
  • 举报
回复

AutoResetEvent evt = new AutoResetEvent(false);

Action a = () =>
{
while (true) {

if (evt.WaitOne())
{
break;
}
}
};

a.BeginInvoke(s =>
{
Action x = (Action)s.AsyncState;
x.EndInvoke(s);
}, a);




Console.ReadLine();
evt.Set();


龍月 2010-08-26
  • 打赏
  • 举报
回复
给 她加个 判断条件, bool 型的就行了
false 为 线程已经关闭
true 为 线程开启
在死循环中 判断 bool 变量

楼主看下 backgroundworker 异步控件 也是 有个 类似 的 bool 属性 来判断线程结束的
cacaca6 2010-08-26
  • 打赏
  • 举报
回复
up

难道只能用传统的线程了吗?

110,571

社区成员

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

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

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