擴展方法 --- 異常處理

擴展方法: 異常處理。async

一般咱們寫異常常常在function內容添加Try catch..  在方法過多的時候這麼寫確實不是什麼好辦法。學習

介紹一下個人擴展處理。 可能你們都是這麼用的。會用的路過就剋以了。 不會的能夠學習一下。spa

擴展代碼以下 :日誌

public static class ExceptionHelper
    {
        /// <summary>
        /// Exes the try asynchronous.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fun">The fun.</param>
        /// <param name="errorMessage">The error message.</param>
        /// <returns></returns>
        /// <exception cref="System.Exception"></exception>
        public static async Task<T> ExTryAsync<T>(Func<Task<T>> fun, string errorMessage)
        {
            try
            {
                return fun().Result;
            }
            catch (Exception ex)
            {
                throw new Exception(errorMessage + "---->" + ex.Message);
            }
        }

        /// <summary>
        /// Exes the try.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fun">The fun.</param>
        /// <param name="errorMessage">The error message.</param>
        /// <returns></returns>
        /// <exception cref="System.Exception"></exception>
        public static T ExTry<T>(Func<T> fun, string errorMessage)
        {
            try
            {
                return fun();
            }
            catch (Exception ex)
            {
                throw new Exception(errorMessage + "---->" + ex.Message);
            }
        }

        /// <summary>
        /// Exes the try.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fun">The fun.</param>
        /// <param name="defaultValue">The default value.</param>
        /// <returns></returns>
        public static T ExTry<T>(Func<T> fun, T defaultValue)
        {
            try
            {
                return fun();
            }
            catch (Exception ex)
            {
                LogWriter.Error(ex);
                return defaultValue;
            }
        }
    }

使用方法:code

    public string GetValue()
    {
        LogHelperExtensions.Info("Object -> GetValue ");
        var baseValue = new BaseValue { State = false, Value = null, ErrDes = "系統服務異常!" };
        return ExceptionHelper.ExTry(() =>
        {
            //本身的業務邏輯
            return baseValue;
        }, baseValue);
    }

能夠看到 咱們經過異常擴展咱們能夠將每個方法體內容處理日誌信息。更好的維護了項目的異常管理。blog

服務級別產生了bug咱們也能夠直接經過日誌查詢。string

 

多說句 微軟的 Async 很不錯!it

相關文章
相關標籤/搜索