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(() => 方法名());

  • 相关阅读:
    17多校6 HDU
    E. Present for Vitalik the Philatelist 反演+容斥
    HDU
    F. Cowmpany Cowmpensation dp+拉格朗日插值
    hdu6088 组合数+反演+拆系数fft
    任意模数fft
    Codeforces Round #258 (Div. 2)E
    bzoj3670: [Noi2014]动物园
    HDU
    IO-InputStreamReader
  • 原文地址:https://www.cnblogs.com/fxck/p/13076786.html
Copyright © 2011-2022 走看看