C#:包装同步调用以引入超时

时间:2015-01-29 14:18:44

标签: c# multithreading

我有一个同步的电话:

var answer = obj.SyncCall(question);

它可以无限期执行,但我想限制它的执行时间:

// throws TimeoutException if not complete in 1000ms
var answer = obj.SyncCall(question, 1000);

如何将 sync 调用包装到线程中以允许描述的行为?

1 个答案:

答案 0 :(得分:2)

.NET 4.5: 您可以运行任务并在规定的时间内等待它:

Task.Run(() => { answer = obj.SyncCall(question) }).Wait(1000);

Pre .NET 4.5: 您可以使用相同的方法,只使用ThreadPool和同步对象:

ManualResetEvent evt = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem((object o) =>
{
  answer = obj.SyncCall(question);
  evt.Set();
});
evt.WaitOne(1000);