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 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
