C#:包装同步调用以引入超时
C#: wrap syncronous call to introduce timeout
我有一个同步调用:
var answer = obj.SyncCall(question);
它可能会无限期执行,但我想限制它的执行时间:
// throws TimeoutException if not complete in 1000ms
var answer = obj.SyncCall(question, 1000);
如何将 sync 调用包装到线程中以允许描述的行为?
.NET 4.5:
您可以 运行 一个任务并在您定义的时间内等待它:
Task.Run(() => { answer = obj.SyncCall(question) }).Wait(1000);
.NET 4.5 之前:
您可以使用相同的方法,只使用 ThreadPool 和同步对象:
ManualResetEvent evt = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem((object o) =>
{
answer = obj.SyncCall(question);
evt.Set();
});
evt.WaitOne(1000);
我有一个同步调用:
var answer = obj.SyncCall(question);
它可能会无限期执行,但我想限制它的执行时间:
// throws TimeoutException if not complete in 1000ms
var answer = obj.SyncCall(question, 1000);
如何将 sync 调用包装到线程中以允许描述的行为?
.NET 4.5: 您可以 运行 一个任务并在您定义的时间内等待它:
Task.Run(() => { answer = obj.SyncCall(question) }).Wait(1000);
.NET 4.5 之前: 您可以使用相同的方法,只使用 ThreadPool 和同步对象:
ManualResetEvent evt = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem((object o) =>
{
answer = obj.SyncCall(question);
evt.Set();
});
evt.WaitOne(1000);