using System;
usingSystem.Collections.Generic;
using System.Linq;
using System.Text;
usingSystem.Threading;
usingSystem.Threading.Tasks;
namespaceConsoleApp1
{
class Program
{
private delegate stringRunnOnThreadPool(out int threadId);
private static voidCallBack(IAsyncResult ar)
{
System.Console.WriteLine("Stard a call back...");
System.Console.WriteLine("State passed to a callback:{0}",ar.AsyncState);
System.Console.WriteLine("Is athread pool thread:{0}", Thread.CurrentThread.IsThreadPoolThread);
System.Console.WriteLine("Thepool worker thread id:{0}", Thread.CurrentThread.ManagedThreadId);
}
private static string Test(out intthreadId)
{
System.Console.WriteLine("Staring...");
System.Console.WriteLine("Is athread pool thread:{0}", Thread.CurrentThread.IsThreadPoolThread);
Thread.Sleep(TimeSpan.FromSeconds(2));
threadId =Thread.CurrentThread.ManagedThreadId;
return string.Format("Threadpool worker thread id was:{0}", threadId);
}
static void Main(string[] args)
{
int threadId = 0;
RunnOnThreadPool poolDelegate =Test;
var t = new Thread(() =>Test(out threadId));
t.Start();
t.Join();
IAsyncResult r =poolDelegate.BeginInvoke(out threadId, CallBack, "a deltegate asynchronouscall");
r.AsyncWaitHandle.WaitOne();
string result =poolDelegate.EndInvoke(out threadId, r);
System.Console.WriteLine("Thepool worker thread id:{0}", threadId);
System.Console.WriteLine(result);
Thread.Sleep(TimeSpan.FromSeconds(2));
Console.Read();
}
}
}
Staring...
Is a thread poolthread:False
Staring...
Is a thread poolthread:True
The pool workerthread id:4
Thread pool workerthread id was:4
Stard a call back...
State passed to acallback:a deltegate asynchronous call
Is a thread poolthread:True
The poolworker thread id:4