异步任务超时?

Jas*_*ter 3 multithreading c#-4.0

我再次面临一项非常普遍的任务.我已经解决了几次,但现在我正在寻找一种更" 优雅 "的方式 - 你能提供一些意见吗?

情况:
我有一个方法,我想运行"半异步".换句话说:启动它并等待给定时间x.如果那个方法没有完成("超时"),我想用一些清理程序继续我的代码.

迄今解决方案:

  1. 使用.WaitOne(x)将AutoResetEvent(或ManualResetEvent)与annonymus方法结合使用.
  2. 将Thread/BackgroundWorker与Timer结合使用.如果计时器在线程停止之前命中它的处理程序,那么therad将超时.

这两个appraochs工作正常,但我想有一个更好的方法4.0.

建议?

Jon*_*eet 6

是否Task.Wait(Timeout)任务并行库做你想要什么?(您可能希望将此与取消令牌结合使用,以在超时发生后取消任务.)