.Net4.0如何实现.NET4.5中的Task.Run及Task.Delay方法

本文介绍了如何在.NET4.0环境下模拟.NET4.5中的Task.Run和Task.Delay方法。通过使用TaskCompletionSource<TResult>类,实现了Task.Run的Action版本和Func<TResult>版本,以及基于System.Timers.Timer实现的Task.Delay方法。提供了测试代码以展示这些方法的功能,即在指定延迟后执行任务。
摘要由CSDN通过智能技术生成

前言

.NET4.0下是没有Task.Run及Task.Delay方法的,而.NET4.5已经实现,对于还在使用.NET4.0的同学来说,如何在.NET4.0下实现这两个方法呢?

在.NET4.0下,有一个泛型类,叫TaskCompletionSource<TReuslt>,它能控制Task的行为,如给Task设置结果、设置异常、设置取消等。

MSDN是这样描述的(网址):

表示未绑定到委托的 Task<TResult> 的制造者方,并通过Task属性提供对使用者方的访问。

它有以下两个常用方法:

1 public void SetException(Exception exception);

当执行的任务有异常时,可以使用该方法是设置任务的异常。

1 public void SetResult(TResult result);

这是给任务设置一个返回值,如果任务没有返回值,直接设置null即可。

一、Task.Run(Action action)方法

 该方法实现与Task.Factory.StartNew(Action action)类似,实现代码如下:

 1         public static Task Run(Action action)
 2         {
 3             var tcs = new TaskCompletionSource<object>();
 4             new Thread(() => {
 5                 try
 6                 {
 7                     action();
 8                     tcs.SetRe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值