擴展方法: 異常處理。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