c# - Debugging exception through multiple nested async calls -
per answer this question, form capturing exception thrown asynchronous method looks this:
public async void dofoo() { try { await foo(); } catch (protocolexception ex) { /* exception caught because you've awaited call. */ } }
great. seems disintegrate if want bubble several levels of asynchrony though. here's exception originates:
internal static async task makepdfpagesfrompdf(pdf pdf, byte[] pdfbytes, int jobid) { ienumerable<image> pdfasimages = pdfoperations.pdftoimagespdfium(pdfbytes, dpi); if(pdfasimages.count() < 1) { throw new argumentexception("pdf has no pages."); } // ... more code ... }
here's method calls makepdfpagesfrompdf
:
internal static async task processbase64pdf(pdf pdf, int jobid, string componentdesignname) { byte[] pdfbytes = convertbase64topdfbytearray(pdf.url); // base64 data in pdf.url await uploadpdftoawss3(pdf, pdfbytes, jobid, componentdesignname); try { await makepdfpagesfrompdf(pdf, pdfbytes, jobid); } catch(argumentexception argumentexception) { throw argumentexception; } }
i catch exception in example cited @ beginning of question. debugging asserts catch
block hit. however, need bubble exception 1 more level, inside controller route:
try { await pdfscontroller.processbase64pdf(pdf, componentdesign.jobid, componentdesign.name); } catch (argumentexception argumentexception) { // stuff exception }
it doesn't hit highest level catch @ breakpoint. removing intermediate catch has no effect. route continues , returns, not able hit breakpoints after argumentexception
thrown intermediate catch
. what's going on here , how can hit breakpoints through whole asynchronous stack?
if method want propogate exception async void
(such in example of dofoo
), issue there no task
object propagate exception (since method void
, not return task
)
another thing suggest not throw argumentexception
, rather throw
, former loses call stack of original exception
Comments
Post a Comment