Sort of...
You can set a global timeout for app server calls. But not a function by function timeout.
According to https://knowledgebase.progress.com/articles/Article/P174143
Two new features were introduced in OpenEdge 10.2B in order to achieve
this goal, either at the procedure block level or at the Application
Server level.
At the procedure block level:
The first way to time restrict procedure calls involves the use of the
STOP-AFTER phrase. This phrase specifies a time-out value for a DO,
FOR, or REPEAT block. The integer expression that specifies the number
of seconds each iteration of a block has until a time-out occurs. If a
time-out occurs, the AVM raises the STOP condition.
At the Application Server level:
Another way to limit the execution time of procedure calls is to set
the property called srvrExecutionTimeLimit in the global [UBroker] or
specific [UBroker.] section of the ubroker.properties
file. This is a non-negative integer property that specifies the
maximum time in seconds that a remote procedure may execute on the
given AppServer. This timeout value applies to all remote procedures
that execute on the AppServer. The default value is zero, which
indicates that no time limit is in effect. AppServer
srvrExecutionTimeLimit property only controls the execution time of a
procedure on the remote AppServer. The data transfer between the
client and AppServer endpoints do not account for the procedure
execution time.
STOP-AFTER apparently doesn't interrupt most statements. It seems that it is checked between statements. Consider the following:
etime( yes ).
repeat stop-after 5 on stop undo, leave:
pause 1.
pause 1.
pause 1.
pause 1.
pause 1.
pause 1.
pause 1.
pause 1.
pause 1.
pause 1.
end.
display etime.
pause.
vs.
etime( yes ).
repeat stop-after 5 on stop undo, leave:
pause 10.
end.
display etime.
pause.
vs.
etime( yes ).
repeat stop-after 5 on stop undo, leave:
pause 1.
end.
display etime.
pause.
So, depending on what your app server code is actually doing this may, or may not, help.
ProgressProxyFor.Net needs to be told to stop after x seconds.
Try DO STOP-AFTER 5: PAUSE 10. DISP "bla". END. It waits for 10 seconds but does not display "bla" so stop-after is quite useless – TomB May 29 '20 at 14:29