I see the syntax of the extrude command in three_surface.asy. Mathematicaly, with 3D paths p and q, the extrude command pushes the curve p along the orbit q.
surface extrude(path3 p, path3 q)
{
static patch[] allocate;
return surface(...sequence(new patch(int i) {
return patch(subpath(p,i,i+1)--subpath(q,i+1,i)--cycle);
},length(p)));
}
surface extrude(path3 p, triple axis=Z)
{
return extrude(p,shift(axis)*p);
}
surface extrude(path p, triple plane(pair)=XYplane, triple axis=Z)
{
return extrude(path3(p,plane),axis);
}
surface extrude(explicit path[] p, triple axis=Z)
{
surface s;
for(path g:p)
s.append(extrude(g,axis));
return s;
}
We should not expect that edges of the extruded surface can be drawn automatically, simply because no edge is realized in the command extrude(path3 p, path3 q). For example, if q is a circle, then there is no edge at all.

// nice to rotate it on http://asymptote.ualberta.ca/
unitsize(1cm);
import graph3;
//path3 bottom = (0,0,0) -- (1,0,0) -- (1,1,0) -- (0,1,0) -- cycle;
path3 bottom=circle(O, 1, normal=Z);
draw(extrude(bottom, 2Z+2Y), yellow);
draw(extrude(bottom, -2Z+2Y), orange);
I believe that extrude command is very useful when making scientific 3D shapes: slanted cube, pyramid, or tubes along an orbit of a differential equation, ....
extrudecommand is amazing ^^ – Black Mild Jan 05 '21 at 19:21