zoukankan      html  css  js  c++  java
  • ABP AsyncHelper.RunSync 内部实现

    using System;
    using System.Reflection;
    using System.Threading.Tasks;
    using Nito.AsyncEx;
    
    namespace Abp.Threading
    {
        /// <summary>
        /// Provides some helper methods to work with async methods.
        /// </summary>
        public static class AsyncHelper
        {
            /// <summary>
            /// Checks if given method is an async method.
            /// </summary>
            /// <param name="method">A method to check</param>
            public static bool IsAsync(this MethodInfo method)
            {
                return (
                    method.ReturnType == typeof(Task) ||
                    (method.ReturnType.GetTypeInfo().IsGenericType && method.ReturnType.GetGenericTypeDefinition() == typeof(Task<>))
                );
            }
    
            /// <summary>
            /// Checks if given method is an async method.
            /// </summary>
            /// <param name="method">A method to check</param>
            [Obsolete("Use MethodInfo.IsAsync() extension method!")]
            public static bool IsAsyncMethod(MethodInfo method)
            {
                return method.IsAsync();
            }
    
            /// <summary>
            /// Runs a async method synchronously.
            /// </summary>
            /// <param name="func">A function that returns a result</param>
            /// <typeparam name="TResult">Result type</typeparam>
            /// <returns>Result of the async operation</returns>
            public static TResult RunSync<TResult>(Func<Task<TResult>> func)
            {
                return AsyncContext.Run(func);
            }
    
            /// <summary>
            /// Runs a async method synchronously.
            /// </summary>
            /// <param name="action">An async action</param>
            public static void RunSync(Func<Task> action)
            {
                AsyncContext.Run(action);
            }
        }
    }
    

    这是 AsyncHelper 的全部代码,可以看到其实内部就是封装的 Nito.AsyncEx 其他什么都没做。

    调用方式:AsyncHelper.RunSync(() => 方法名());

  • 相关阅读:
    element-ui 后台问题
    element-ui 使用:rules对表单字段进行验证
    扫码枪 移动端监听
    前端好用工具介绍——wulihub
    移动端 扫描枪输入不弹出键盘
    移动端 input输入实时监听查询数据渲染
    新老系统统一认证解决方案
    转 高性能IO模型浅析
    数据库备份方案
    软件开发阶段数据库升级维护策略
  • 原文地址:https://www.cnblogs.com/fxck/p/13076786.html
Copyright © 2011-2022 走看看