Catching an exception thrown in an asynchronous callback

后端 未结 3 589
日久生厌
日久生厌 2021-01-04 23:10

I have a method that takes a callback argument to execute asynchronously, but the catch block doesn\'t seem to be catching any exceptions thrown by the synchronous call (

3条回答
  •  时光说笑
    2021-01-04 23:34

    This is not a 'best practice' solution, but I think it's a simple one that should work.

    Instead of having the delegate defined as

    private delegate string SubmitFileDelegate(FileInfo file);
    

    define it as

    private delegate SubmitFileResult SubmitFileDelegate(FileInfo file);
    

    and define the SubmitFileResult as follows:

    public class SubmitFileResult
    {
        public string Result;
        public Exception Exception;
    }
    

    Then, the method that actually does the file submission (not shown in the question) should be defined like this:

    private static SubmitFileResult Submit(FileInfo file)
    {
        try
        {
            var submissionResult = ComplexSubmitFileMethod();
    
            return new SubmitFileResult { Result = submissionResult };
        }
        catch (Exception ex)
        {
            return new SubmitFileResult {Exception = ex, Result = "ERROR"};
        }
    }
    

    This way, you'll examine the result object, see if it has the Result or the Exception field set, and act accordingly.

提交回复
热议问题