1、
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace DataReport
{

class Class1{    static void Main(string[] args)    {        int threadId = 0;        RunOnThreadPool poolDelegate = Test;        var t = new Thread(() => Test(out threadId));        t.Start();        t.Join();        Console.WriteLine("Thread id :{0}", threadId);        IAsyncResult r = poolDelegate.BeginInvoke(out threadId, Callback, "a delegate asynchronous call");        r.AsyncWaitHandle.WaitOne();        string result = poolDelegate.EndInvoke(out threadId, r);        Console.WriteLine("Thread pool worker thread id:{0}", threadId);        Console.WriteLine(result);        Thread.Sleep(TimeSpan.FromSeconds(2));    }    private delegate string RunOnThreadPool(out int threadId);    private static void Callback(IAsyncResult ar)    {        Console.WriteLine("Starting a callback...");        Console.WriteLine("State passed to a callback: {0}", ar.AsyncState);        Console.WriteLine("Is thread pool thread:{0}", Thread.CurrentThread.IsThreadPoolThread);        Console.WriteLine("Thread pool worker thread id: {0}", Thread.CurrentThread.ManagedThreadId);    }    private static string Test(out int threadId)    {        Console.WriteLine("Starting...");        Console.WriteLine("Is thread pool thread:{0}", Thread.CurrentThread.IsThreadPoolThread);        Thread.Sleep(TimeSpan.FromSeconds(2));        threadId = Thread.CurrentThread.ManagedThreadId;        return string.Format("Thread pool worker thread id was {0}", threadId);    }}

}

3、向线程池中放入异步操作
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace DataReport
{

class Class1{    static void Main(string[] args)    {        int threadId = 0;        RunOnThreadPool poolDelegate = Test;        var t = new Thread(() => Test(out threadId));        t.Start();        t.Join();        Console.WriteLine("Thread id :{0}", threadId);        IAsyncResult r = poolDelegate.BeginInvoke(out threadId, Callback, "a delegate asynchronous call");        r.AsyncWaitHandle.WaitOne();        string result = poolDelegate.EndInvoke(out threadId, r);        Console.WriteLine("Thread pool worker thread id:{0}", threadId);        Console.WriteLine(result);        Thread.Sleep(TimeSpan.FromSeconds(2));    }    private delegate string RunOnThreadPool(out int threadId);    using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace DataReport

{    class Class1    {        static void Main(string[] args)        {            const int x = 1;            const int y = 2;            const string lambdaState = "lambda state 2";            ThreadPool.QueueUserWorkItem(AsyncOperation);            Thread.Sleep(TimeSpan.FromSeconds(1));            ThreadPool.QueueUserWorkItem(AsyncOperation, "async state");            Thread.Sleep(TimeSpan.FromSeconds(1));            ThreadPool.QueueUserWorkItem(state =>            {                Console.WriteLine("Operation state:{0}", state);                Console.WriteLine("Worker thread id: {0}", Thread.CurrentThread.ManagedThreadId);                Thread.Sleep(TimeSpan.FromSeconds(2));            }, "lambda state");            ThreadPool.QueueUserWorkItem(_ =>            {                Console.WriteLine("Operation state:{0},{1}", x+y,lambdaState);                Console.WriteLine("Worker thread id: {0}", Thread.CurrentThread.ManagedThreadId);                Thread.Sleep(TimeSpan.FromSeconds(2));            }, "lambda state");            Thread.Sleep(TimeSpan.FromSeconds(2));        }                private static void AsyncOperation(object state)        {            Console.WriteLine("Operation state: {0}", state??"(null)");            Console.WriteLine("Worker thread id:{0}", Thread.CurrentThread.ManagedThreadId);            Thread.Sleep(TimeSpan.FromSeconds(2));        }    }}

}

4、