using System;
using System.Threading;
using System.Threading.Tasks;
namespace Core.Util
{
/// <summary>
/// 异步转同步,防止ASP.NET中死锁
/// https://cpratt.co/async-tips-tricks/
/// </summary>
public static class AsyncHelper
{
private static readonly TaskFactory _myTaskFactory =
new TaskFactory(CancellationToken.None, TaskCreationOptions.None, TaskContinuationOptions.None, TaskScheduler.Default);
/// <summary>
/// 同步执行
/// </summary>
/// <param name="func">任务</param>
public static void RunSync(Func<Task> func)
{
//Unwra冲嵌套的task取出结果
_myTaskFactory.StartNew(func).Unwrap().GetAwaiter().GetResult();
}
/// <summary>
/// 同步执行
/// </summary>
/// <typeparam name="TResult">返回类型</typeparam>
/// <param name="func">任务</param>
/// <returns></returns>
public static TResult RunSync<TResult>(Func<Task<TResult>> func)
{
//Unwra冲嵌套的task取出结果
return _myTaskFactory.StartNew(func).Unwrap().GetAwaiter().GetResult();
}
}
}
(精华)2020年6月26日 C#类库 异步转同步帮助类
猜你喜欢
转载自blog.csdn.net/aa2528877987/article/details/106966128
今日推荐
周排行