【发布时间】:2016-03-11 02:05:34
【问题描述】:
我有一个我无法控制的方法(假设它来自另一个库):
private static void DoWork()
{
// I have no control over this method
while (true)
{
Console.WriteLine("Still working");
}
}
我想等待一段时间(例如 20 秒),如果在这段时间内作业没有完成,则停止代码。
到目前为止我已经尝试过:
使用任务取消模式对我来说不是一个选项,因为我无法控制我正在执行的方法
-
仅使用
Task类不是一个选项,因为不使用取消令牌我无法停止任务的执行var taskToWaitAndKill = Task.Factory.StartNew(DoWork); taskToWaitAndKill.Wait(20000); // 20 seconds // The task cannot be stopped (aborted) and still runs... -
使用
Thread类,等待它并中止它不是一个选项,因为我需要等待所有 20 秒才能停止代码。var thread = new Thread(DoWork); thread.Start(); Thread.Sleep(20000); thread.Abort();
所以我的问题有没有办法在 C# 中等待固定的毫秒数让代码执行,如果代码更早完成则不再等待?
【问题讨论】:
-
必须中止操作吗?还是可以在您恢复工作时在后台继续运行?
-
请参阅if this answer 帮助。
标签: c# .net multithreading task cancellation