当前位置:  开发笔记 > 编程语言 > 正文

合理使用C#中的线程?

如何解决《合理使用C#中的线程?》经验,为你挑选了1个好方法。

作为大型自动化流程的一部分,我们正在调用第三方API,它可以在另一台机器上调用服务.我们最近发现,当其他计算机不可用时,API调用有时会在尝试连接到远程服务器时旋转40分钟.

我们正在使用的API没有提供指定超时的方法,我们不希望我们的程序等待那么久,所以我认为线程将是一种强制执行超时的好方法.生成的代码如下所示:

 Thread _thread = new Thread(_caller.CallServices());

 _thread.Start();
 _thread.Join(timeout);

 if (_thread.IsAlive)
 {
      _thread.Abort();
      throw new Exception("Timed-out attempting to connect.");
 }

基本上,我想让APICall()运行,但是如果它在超时过后仍然存在,则假设它将失败,将其终止并继续前进.

由于我刚接触C#和.net运行时的线程,我想我会问两个相关的问题:

.net库中是否有更好/更合适的机制用于我正在尝试做的事情,并且我在那段代码中提交了任何线程陷阱吗?



1> Cecil Has a ..:

Thread.Abort()是一个请求线程中止,并不保证它会及时这样做.它也被认为是不好的做法(它会在中止的线程中抛出一个线程中止异常,但看起来第三方API没有其他选择.

如果您(以编程方式)知道远程服务主机的地址,则应在将控制权转移到第三方API之前对其进行ping操作.

如果不使用backgroundworker,可以将线程的IsBackgroundThread设置为true,这样就不会使程序终止.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有