(精华)2020年6月26日 C#类库 异步转同步帮助类

using System;
using System.Threading;
using System.Threading.Tasks;

namespace Core.Util
{
    /// 
    /// 异步转同步,防止ASP.NET中死锁
    /// https://cpratt.co/async-tips-tricks/
    /// 
    public static class AsyncHelper
    {
        private static readonly TaskFactory _myTaskFactory =
            new TaskFactory(CancellationToken.None, TaskCreationOptions.None, TaskContinuationOptions.None, TaskScheduler.Default);

        /// 
        /// 同步执行
        /// 
        /// 任务
        public static void RunSync(Func<Task> func)
        {
            //Unwra冲嵌套的task取出结果
            _myTaskFactory.StartNew(func).Unwrap().GetAwaiter().GetResult();
        }

        /// 
        /// 同步执行
        /// 
        /// 返回类型
        /// 任务
        /// 
        public static TResult RunSync<TResult>(Func<Task<TResult>> func)
        {
            //Unwra冲嵌套的task取出结果
            return _myTaskFactory.StartNew(func).Unwrap().GetAwaiter().GetResult();
        }
    }
}

你可能感兴趣的:(#,C#类库/扩展方法)