我目前正在使用串口,并且我使用的 API 有时会在读取时挂起,即使设置了超时时间。
这不是一个大问题,但当发生这种情况并且挂起的线程需要关闭时,我需要做一些工作。我已经尝试使用以下方法,但它一直给我带来问题,因为 API 调用没有被终止,而是允许继续执行,而其余代码继续执行,然后抛出 TimeoutException
。如何使用 Task
在一定时间后取消挂起的任务?
CancellationToken token = new CancellationToken();
var task = Task.Factory.StartNew(() =>
{
CallingAPIThatMightHang(); // Example
}, token);
if (!task.Wait(this.TimeToTimeOut, token))
{
throw new TimeoutException("The operation timed out");
}
Task
真的是一种限制吗?只需创建线程,然后根据需要使用Abort
终止即可。 - n0rdThread.Abort
是邪恶的,即不会清理... - user57508