public void Run(Callable <T> c)
{
try {
lock (this) {
if (canceled)
{
return;
}
t = SThread.CurrentThread;
started = true;
}
result = c.Call();
} catch (ThreadAbortException ex) {
SThread.ResetAbort();
error = ex;
} catch (Exception ex) {
error = ex;
} finally {
lock (this) {
done = true;
service.RemoveTask(doneEvent);
}
doneEvent.Set();
}
}