我有一个同步的电话:
var answer = obj.SyncCall(question);
它可以无限期执行,但我想限制它的执行时间:
// throws TimeoutException if not complete in 1000ms
var answer = obj.SyncCall(question, 1000);
如何将 sync 调用包装到线程中以允许描述的行为?
答案 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);