src/DotNetCommon.Core/Extensions/TaskExtensions.cs

(开头部分) 10KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

namespace DotNetCommon.Extensions
{
    using DotNetCommon.Data;
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Runtime.CompilerServices;
    using System.Threading;
    using System.Threading.Tasks;

    /// <summary>
    /// <see cref="System.Threading.Tasks"/>扩展类
    /// </summary>
    public static class TaskExtensions
    {
        /// <summary>
        /// 通用异步转换方法,参照: <seealso cref="ObjectExtensions.Mapper{TFrom, TDest}(object, bool, bool)"/>
        /// </summary>
        /// <typeparam name="TDest"></typeparam>
        /// <typeparam name="TFrom"></typeparam>
        /// <param name="task"></param>
        /// <returns></returns>
        public static async Task<TDest> MapperAsync<TFrom, TDest>(this Task<TFrom> task)
        {
            return await task.ContinueWith(t => t.Result.Mapper<TDest>());
        }

        /// <summary>
        /// 解开Result模型, Result.Success为true则返回模型,否则抛出ResultException异常
        /// </summary>
        public static async Task<T> UnWrapAsync<T>(this Task<Result<T>> task)
        {
            var t = await task.ContinueWith(t => t.Result.UnWrap());
            return t;
        }

        /// <summary>
        /// 解开Result模型, Result.Success为true则返回模型,否则抛出ResultException异常
        /// </summary>
        public static async Task<object> UnWrapAsync(this Task<Result> task)
        {
            return await task.ContinueWith(t => t.Result.UnWrap());
        }

        /// <summary>
        /// 设置当前任务的最长等待时间<paramref name="timeout"/>,如果在指定的时间内还未执行完毕就报异常
        /// </summary>
        public static async Task<T> TimeoutAfter<T>(this Task<T> task, TimeSpan timeout)
        {
            await TimeoutAfterImpl(task, timeout).ConfigureAwait(false);
            return task.Result;
        }

        /// <summary>
        /// 设置当前任务集合全部执行完毕的最长等待时间<paramref name="timeout"/>,如果在指定的时间内还未执行完毕就报异常
        /// </summary>
        public static async Task<IEnumerable<Task<T>>> TimeoutAfter<T>(
            this IEnumerable<Task<T>> tasks, TimeSpan timeout)
        {
            await TimeoutAfterImpl(tasks, timeout).ConfigureAwait(false);
后面还有 236 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。