惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google Online Security Blog
Google Online Security Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
C
CERT Recently Published Vulnerability Notes
C
Cybersecurity and Infrastructure Security Agency CISA
Cisco Talos Blog
Cisco Talos Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Scott Helme
Scott Helme
Project Zero
Project Zero
E
Exploit-DB.com RSS Feed
S
Secure Thoughts
K
Kaspersky official blog
L
Lohrmann on Cybersecurity
NISL@THU
NISL@THU
WordPress大学
WordPress大学
N
News and Events Feed by Topic
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LINUX DO - 热门话题
小众软件
小众软件
P
Privacy & Cybersecurity Law Blog
博客园 - 聂微东
Google DeepMind News
Google DeepMind News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
A
About on SuperTechFans
Hacker News: Ask HN
Hacker News: Ask HN
AWS News Blog
AWS News Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Hacker News: Front Page
F
Full Disclosure
Latest news
Latest news
Schneier on Security
Schneier on Security
The Hacker News
The Hacker News
T
Troy Hunt's Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Jina AI
Jina AI
Martin Fowler
Martin Fowler
P
Proofpoint News Feed
TaoSecurity Blog
TaoSecurity Blog
G
GRAHAM CLULEY
Forbes - Security
Forbes - Security
V
V2EX - 技术
酷 壳 – CoolShell
酷 壳 – CoolShell
V
Vulnerabilities – Threatpost
C
Cyber Attacks, Cyber Crime and Cyber Security
MongoDB | Blog
MongoDB | Blog
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
P
Privacy International News Feed
C
Check Point Blog
N
News and Events Feed by Topic

博客园 - 残香恨

WinForm:如何设置DataGridView列标题对齐方式 WinForm:如何在ListBox中添加CheckBox ASP.NET WebForm开发WAP网站 lock语句的递归问题 VS 2010 调试 .NET Framework 源代码 最近遇到的两个问题 ASP.NET MVC 2 模板化辅助方法 SynchronizationContext对Windows Forms窗体控件的更新方法 - 残香恨 SQL Server 2008 Express 升级R2全过程 自定义ASP.NET MVC Html辅助方法 - 残香恨 将ASP.NET MVC 1.0升级到ASP.NET MVC 2的三种方法 .NET 4.0:一段动态绑定代码的底层初级分析 Visual Studio 2010 RTM版安装初体验 .NET中的线程 .NET 4.0 任务(Task) C#4.0 动态绑定(Dynamic Binding) .NET4.0线程池的Cooperative Cancellation模式 Visual Studio 2010 RC初体验 SQL Server导入文本文件时选择相同数据类型的一个小技巧
.NET4.0新功能:任务(Task)
残香恨 · 2010-03-04 · via 博客园 - 残香恨

  用过.NET线程池的程序员都知道通过调用ThreadPool类的QueueUserWorkItem方法把要执行的代码放入线程池去执行。由于.NET FCL的强大,使得这个操作极其简便。但使用线程池有个明显的不足之处,那就是我们无法获取线程池执行方法的返回值,因为WaitCallback委托的返回值为void。注:WaitCallback委托的原型为:public delegate void WaitCallback(Object state)。

  比如,我们有个方法代码是这样的:

public int Sum()
{
    
//此方法模拟一个耗时操作
    int sum = 0;
    
for (int num = 1; num <= 100; num++)
    {
       Thread.Sleep(
5);
       sum 
+= num;
    }
    return sum;

}

  假如这个方法可以加入线程池中去执行(实际上不能,因为不匹配WaitCallback委托),但我们也无法获取执行的结果。随着.NET4.0的发布,这个问题得到了解决,.NET 4.0提供了一个新功能,叫任务(Task),在System.Threading.Task命名空间下,有个Task类及其泛型版本Task<TResult>。我们可以把这个方法添加到任务,并可以获得执行结果,示意代码如下:

using System;
using System.Threading;
using System.Threading.Tasks;namespace TaskDemo
{
    
class Program
    {
        
static void Main(string[] args)
        {
            Task
<int> task = new Task<int>(() => Sum());//新建任务实例       
            task.Start();//开始任务
            Console.WriteLine(
"任务已开始");
            task.Wait();//等待任务执行完成
            Console.WriteLine(task.Result);
        }
     //此方法模拟一个耗时操作
        static int Sum()
        {
            Console.WriteLine(
"任务正在执行");
            
int sum = 0;
            
for (int num = 1; num <= 100; num++)
            {
                Thread.Sleep(
5);
                sum 
+= num;
            }
            
return sum;
        }
    }
}

  任务(Task)确实是个好东东!这里只对任务(Task)作个初步的介绍。由于我也只是刚接触,感觉这是个非常有用的功能,于是忍不住就写出来了,由于笔者水平有限,不足之处还望高手指点。

  最后,非常感谢Jeffrey Richter给我们带来的惊喜--《CLR via C#, Third Edition》。

  参考文献:《CLR via C#, Third Edition》,作者:Jeffrey Richter。